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

    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ドット(.)を改行文字にもマッチさせる

    参考