JavaScript では、RegExp コンストラクターを使用して正規表現を構築するときに、文字列リテラルを二重エスケープすることが重要です。この手法は最初は不可解に思えるかもしれませんが、文字列リテラル内の JavaScript のエスケープ シーケンス解釈に由来しています。
文字列を RegExp コンストラクターに渡すとき、文字列リテラルが適用されます。解析中。このプロセス中、バックスラッシュ文字 () はエスケープ文字として機能します。 RegExp 文字列リテラルで single を使用すると、文字列リテラル パーサーによって使用されます。
たとえば、次のコードを考えてみましょう。
const foo = "foo"; const singleEscapedString = '(\s|^)' + foo;
この例では、 s の前のバックスラッシュは、文字列リテラル内のエスケープ文字として解釈されます。その結果、s 文字の特別な意味が削除されます。ただし、正規表現のコンテキストでは、 s はエスケープ シーケンスの解釈により失われる空白文字と一致する必要があります。
この誤解を防ぐには、文字列内のバックスラッシュを二重にエスケープする必要があります。リテラル。これにより、文字列リテラル パーサーに対して、正規表現エンジンに対する特別な意味を保持しながら、次の文字を文字通りに扱うように効果的に指示されます。
const doubleEscapedString = '(\s|^)' + foo;
二重エスケープにより、バックスラッシュが文字列リテラル パーサーによって消費されないようにします。これにより、正規表現エンジンがエスケープ文字として正しく解釈できるようになります。
次の単一エスケープ文字列を考えてみましょう:
const singleEscapedString = '[\w\s]+'; console.log(singleEscapedString);
ここで、w の前のバックスラッシュはエスケープ文字として解釈され、w 文字の特別な意味が削除されます。その結果、文字列は単語文字または空白文字のいずれかの文字と一致します。ただし、これは意図した動作ではありません。
バックスラッシュを二重にエスケープすることで、w 文字が正規表現内の単語文字として扱われるようになります。
const doubleEscapedString = '[\w\s]+'; console.log(doubleEscapedString);
以上がJavaScript の RegExp コンストラクターでバックスラッシュを二重にエスケープする必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。