ECMAScript 正規表現のパターン修飾子の使い方
2024年10月にRegExp Modifiersの提案がStage 4に更新された。おそらくECMAScript 2025に含まれることが予想される。
パターン修飾子とは
正規表現のフラグはすべてに適用されてしまう。たとえば以下のように/test/iとした場合、TESTやtest、TeStにもマッチする。
/test/i.test('test') // true
/test/i.test('TEST') // true
/test/i.test('Test') // true
そこでRegExp Modifiersのパターン修飾子を使うと、iなどのフラグを一部にだけ適用することができる。
たとえばTESTという文字列のEとSだけ大文字・小文字を区別しないようにする場合は、(?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>を有効にする-に続く<flag>を無効にする
サポートされるフラグ
| flag | 意味 |
|---|---|
i | 大文字・小文字を区別しない |
m | 複数行チェックする |
s | ドット(.)を改行文字にもマッチさせる |