≪ Today I learned.
RSS購読
    公開日
    タグ
    JavaScript
    著者
    ダーシノ

    RegExp.escape()で正規表現のパターンをエスケープする

    RegExp.escape()がBaseline 2025になり、全主要ブラウザで使えるようになった。

    RegExp.escape()を使うことで、正規表現のパターン(.*など)をエスケープできる。いままでの\(バックスラッシュ)を使ったエスケープよりパターンの可読性が上がる。

    // Before
    if (/^https:\/\/example\.com/.test(url)) {
      // do something
    }
    
    // After
    const escaped = RegExp.escape("https://example.com");
    if (new RegExp(`^${escaped}`).test(url)) {
      // do something
    }

    また、受け取った文字列を正規表現の一部として使う場合、その文字列にメタ文字(.+*など)が含まれていると、意図しない文字列にマッチしてしまうことがある。

    function isMatch(pattern, text) {
      // patternにメタ文字が含まれているときに、意図しない文字列にマッチしてしまう
      return new RegExp(pattern).match(text)
    }

    RegExp.escape()を使うことで、受け取った文字列をエスケープしてから使うことで、意図しない動作を防げる。

    function isMatch(pattern, text) {
      // patternにメタ文字が含まれていても、意図しない文字列にマッチしない
      const escaped = RegExp.escape(pattern);
      return new RegExp(escaped).match(text)
    }