変数と連結するJavaScript正規表現パターン


92

変数と連結した正規表現パターンを作成するには、次のようにします。

var test ="52";
var re = new RegExp("/\b"+test+"\b/"); 
alert('51,52,53'.match(re));

ありがとう

回答:


148
var re = new RegExp("/\b"+test+"\b/"); 

\b文字列リテラルでは、バックスペース文字です。文字列リテラルに正規表現を入れるときは、もう1ラウンドのエスケープが必要です。

var re = new RegExp("\\b"+test+"\\b"); 

//このコンテキストでは、も必要ありません。)


16
組み込み型のコンストラクター関数は、の有無にかかわらず使用できる多くの場所がありますnew。ただし、これが当てはまらない可能性のある他のオブジェクトとの一貫性、および一般的に明確にするために、常にを使用しますnew
ボビンス、

1
もう一つの方法は、あなたがバックスラッシュをエスケープする必要はありませんので、わかりやすくするために、単一引用符を使用することです:new RegExp('\b'+test+'\b');
IQAndreas

5
バックスラッシュをエスケープする必要があります。一重引用符には、JavaScriptでの二重引用符とは異なるエスケープルールがありません(たとえば、PHPとは異なります)。
ボビンス2015年

この回答は、.match()および.replace()JS正規表現関数を使用して変数で境界演算子を使用しようとする場合の同じ質問も解決します。
HoldOffHunger 2016年

まさに私が探していたもの。についての部分When putting a regex in a string literal you need one more round of escaping。これ(の理由)に関する背景情報はありますか?
Bas Peeters 2017年

9

あなたは使うことができます

/(^|,)52(,|$)/.test('51,52,53')

しかし、私は使用することをお勧めします

var list = '51,52,53';
function test2(list, test){
    return !((","+list+",").indexOf(","+test+",") === -1)
}
alert( test2(list,52) )

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.