ホームページ > ウェブフロントエンド > jsチュートリアル > RegExp コンストラクターを使用するときに文字列を 2 回エスケープする必要があるのはなぜですか?

RegExp コンストラクターを使用するときに文字列を 2 回エスケープする必要があるのはなぜですか?

Linda Hamilton
リリース: 2024-12-26 03:04:13
オリジナル
555 人が閲覧しました

Why Do I Need to Escape Strings Twice When Using the RegExp Constructor?

RegExp コンストラクターで文字列を 2 回エスケープする必要がある理由

RegExp コンストラクターを使用して正規表現を作成する場合、単一のエスケープ文字 () はs (空白) などの特殊文字には不十分です。これらの文字が正しく解釈されるようにするには、二重エスケープ () が必要です。

この要件は、RegExp コンストラクターに渡される文字列が最初は通常の文字列リテラルとして処理されるために発生します。文字列リテラル内ではエスケープ文字として機能し、s のような特殊文字を文字通りに含めることができます。ただし、正規表現を構築する場合、最初のエスケープ文字は文字列リテラルの解析プロセス中に消費されます。

次の例を考えてみましょう。

const foo = "foo";
const string = '(\s|^)' + foo;
console.log(string);
ログイン後にコピー

この例では、意図した正規表現は次のとおりです。 (s|^) の後に foo の値が続きます。ただし、 s の前の 1 つのエスケープは文字列リテラルの解析によって消費されます。この結果、文字列 (s|^) が foo と連結されますが、これは有効な正規表現ではありません。

この誤解を防ぐために、二重エスケープ () が使用されます。最初のエスケープ文字は文字列リテラルの解析によって消費されますが、2 番目のエスケープ文字は、次の文字が正規表現の一部であり、そのように解釈される必要があることを示します。

const foo = "foo";
const string = '(\s|^)\' + foo;
console.log(string);
ログイン後にコピー

この場合、意図されたfoo が後に続く正規表現 (s|^) は正しく構築されています。二重エスケープにより、特殊文字が文字列リテラルの一部としてではなく、正規表現の一部として扱われることが保証されます。

以上がRegExp コンストラクターを使用するときに文字列を 2 回エスケープする必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート