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

ECMAScript 正規表現のパターン修飾子の使い方

2024年10月にRegExp Modifiersの提案がStage 4に更新された。おそらくECMAScript 2025に含まれることが予想される。

パターン修飾子とは

正規表現のフラグはすべてに適用されてしまう。たとえば以下のように/test/iとした場合、TESTtestTeStにもマッチする。

/test/i.test('test') // true
/test/i.test('TEST') // true
/test/i.test('Test') // true

そこでRegExp Modifiersのパターン修飾子を使うと、iなどのフラグを一部にだけ適用することができる。

たとえばTESTという文字列のESだけ大文字・小文字を区別しないようにする場合は、(?i:ES)と書く。

/^t(?i:ES)t$/.test('test') // true
/^t(?i:ES)t$/.test('tEst') // true
/^t(?i:ES)t$/.test('teSt') // true
/^t(?i:ES)t$/.test('tESt') // true
/^t(?i:ES)t$/.test('TesT') // false

逆に、ベースを大文字・小文字の区別をしないようにして、一部だけ区別したいようにする場合は(?-i:es)のように書く。

/^t(?-i:es)t$/i.test('test') // true
/^t(?-i:es)t$/i.test('TesT') // true
/^t(?-i:es)t$/i.test('tESt') // false

パターン修飾子の構文

(?<flag>:pattern)
(?-<flag>:pattern)

サポートされるフラグ

flag意味
i大文字・小文字を区別しない
m複数行チェックする
sドット(.)を改行文字にもマッチさせる

参考