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

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)
}