RegExp コンストラクターを使用して文字列から正規表現を作成する場合、特殊な二重エスケープが重要です特定の文字またはシーケンスを表す s のような文字。これは、バックスラッシュ文字自体が文字列リテラルにおいて特別な意味を持っているためです。
インタプリタは、文字列リテラル内でバックスラッシュ () を検出すると、後続の文字を特殊文字として扱います。たとえば、 s は空白文字に一致します。
ただし、バックスラッシュを二重エスケープせずにそのような文字列を直接渡すと、RegExp コンストラクターは最初のバックスラッシュを文字列リテラル内のエスケープ文字として解釈します。その結果、次の文字 (この場合は s) はリテラル文字になり、意図した RegExp パターンは正しく構築されません。
たとえば、次の文字列:
var string = '(\s|^)' + foo;
は解釈されます。パターン「(s|^)」の正規表現として使用します。s は空白パターンではなく、リテラルの空白文字として扱われます。この問題を解決するには、次の例に示すように、バックスラッシュを二重にエスケープする必要があります。
var res = new RegExp('(\s|^)' + foo).test(moo);
この場合、式 (s|^)' は最初に文字列リテラルとして作成されます。バックスラッシュ文字は、RegExp コンストラクターに渡される前にリテラルのバックスラッシュとして扱われます。これにより、最終的な RegExp パターンに意図した空白パターンが確実に含まれるようになります。
二重エスケープの重要性をさらに説明するために、次の例を考えてみましょう。
const string = "(\s|^)" + foo; console.log(string); // Output: (\s|^)foo
バックスラッシュを二重エスケープしないでください。s は文字列リテラル内のリテラル文字として扱われ、出力は文字列「(s|^)foo」ではなく文字列「(s|^)foo」になります。意図した正規表現パターン。したがって、RegExp コンストラクターに渡される文字列内の特殊文字を二重エスケープすることは、目的の正規表現を正確に構築するために重要です。
以上がJavaScript RegExp コンストラクター文字列でバックスラッシュを二重にエスケープする必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。