2017-08-21 11 views
2

エスケープする必要がある複数のsimbolsがパラメータに含まれている場合、エスケープ可能なパラメータ付き正規表現ですか?JavaScript regex複数の文字をエスケープ

const _and = '&&', _or = '||'; 
let reString = `^(${_and}|${_or})`; //&{_or} needs to be escaped 
const reToken = new RegExp(reString); 

作業が、最適ではない:

_or = '\\|\\|'; 

または:

let reString = `^(${_and}|\\|\\|)`; 

_or変数を再利用してパラメータ化正規表現を維持することが好ましいです。

+0

Btw。変数に 'と'と 'または'の名前を使うことができます。これはjavascriptの中で[予約されたキーワード]ではないからです(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#キーワード)。接頭辞 '_ 'を追加する必要はありません。一部の人がプライベートプロパティ名に追加します。あなたはすべきだと言っているわけではありませんが、間違いなくあなたはできます。 :) – kamyl

+0

はい。ありがとうございました。私はそれがpythonバックエンドを持つ精神的な結果だと思う:)) –

答えて

2

あなたは、あなたのパラメータを逃れるだろう独自の関数を作ることができるように、最終的な正規表現でこれらの作品。時間を節約するために、私はすでにthis answerで書かれたものを見つけました。この関数を使用すると、実際にすべてを手動でエスケープすることなくクリーンなパラメータを記述することができます。私はクラスでのビルド(RegExp)の変更を避け、その周りのラッパーや別のものを作成することはありません。以下の例では、私はRegExpでビルドを拡張する他の答えにある正確な関数を使用します。

RegExp.escape = function(s) { 
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); 
}; 

const and = RegExp.escape('&&'); 
const or = RegExp.escape('||'); 

const andTestString = '1 && 2'; 
const orTestString = '1 || 2'; 
const regexp = `${and}|${or}`; 

console.log(new RegExp(regexp).test(andTestString)); // true 
console.log(new RegExp(regexp).test(orTestString)); // true 
1

https://jsfiddle.net/ao4t0pzr/1/

あなたは正規表現を使用して文字列内の文字をエスケープするテンプレート関数リテラルを使用することができます編集しました。その後、エスケープ文字で埋め、新たな正規表現を伝播するためにその文字列を使用することができます。

function escape(s) { 
 
     return s[0].replace(/[-&\/\\^$*+?.()|[\]{}]/g, '\\$&'); 
 
    }; 
 
    
 
    var or = escape`||`; 
 
    var and = escape`&&`; 
 
    console.log(new RegExp(`${and}|${or}`)); // "/\&\&|\|\|/"

関連する問題