JavaScript正規表現フラグの使い分け
g、i、m、s、u、yの役割と組み合わせを具体例で比較し、複数一致、状態、改行、Unicodeの結果を確認します。
公開日: 2026-08-10 · 更新日: 2026-08-10
主要フラグの役割
JavaScriptの正規表現フラグは、同じパターンをどのように検索するかを変えます。
g(global)は最初の一致だけでなく、後続の一致も探します。i(ignore case)は大文字と小文字を区別しない照合を行います。m(multiline)は^と$を文字列全体だけでなく各行の先頭と末尾にも一致させます。s(dotAll)は.が改行文字にも一致するようにします。u(Unicode)はパターンと入力をUnicodeコードポイントを考慮して扱います。y(sticky)はlastIndexが示す位置から始まる一致だけを許可します。
フラグはパターン本文とは別に指定します。App Museumの正規表現テスターでは、たとえばパターン欄へ error、フラグ欄へ gi と入力します。
gによる複数一致と状態変化
対象が ID-12 ID-34、パターンが \d+ の場合、g なしの一般的な検索は最初の 12 だけを返し、g を使った全体検索は 12 と 34 を返します。テスターは一致一覧を作るため内部で全体を走査するので、実際のコードで使うメソッドとフラグの組み合わせも別に確認してください。
g または y を持つRegExpオブジェクトで exec() や test() を繰り返すと、次の開始位置が lastIndex に保存されます。同じオブジェクトを別の入力や別の処理で再利用すると、先頭から検索しない場合があります。期待しない結果が出たら、lastIndex、RegExpオブジェクトの再利用、呼び出したメソッドを確認します。
空文字列へ一致するパターンでは位置が進まない問題もあります。先読みや境界を使う場合は、関連ガイド「正規表現のゼロ幅一致を安全にテストする方法」で位置と反復処理も確認してください。
mとsは変更する対象が違う
m はアンカー、s はドットの意味を変えます。どちらも「複数行用」とまとめて考えると誤りやすいフラグです。
input:
first
error
pattern: ^error$
flags: m
expected: error on the second line
一方、パターン first.*error は、フラグなしでは . が改行へ一致しないため失敗します。s を付けると改行をまたいで一致します。m を付けても . の範囲は変わりません。
Unicode文字と絵文字を確認する
JavaScript文字列では、基本多言語面の外にある絵文字がUTF-16の2コード単位になることがあります。入力が単独の 😀 でパターンが ^.$ の場合、u なしでは1個の . が絵文字全体を表せず、u 付きでは1コードポイントとして一致します。
i を付ければすべての言語で人間が期待する同一視ができる、とは限りません。Unicodeの大文字・小文字変換、結合文字、正規化された表記は別の問題です。アクセント付き文字、結合文字、絵文字を扱う場合は、実際の入力例をテストし、必要なら正規化方針も決めてください。
フラグを組み合わせて比較する
次の入力でパターン ^error:.*timeout$ を試します。
INFO: ready
Error:
timeout
ERROR: timeout
gmでは大文字小文字が異なり、改行も.を通らないため一致しません。gimでは4行目のERROR: timeoutに一致します。gimsでは2行目のError:から4行目のERROR: timeoutまで一致できます。貪欲な.*の範囲が広がるため、意図より長く一致しないか確認します。
y は字句解析のように「現在位置から必ず次のトークンを読む」用途に向きます。通常の全文検索で途中の候補を探す g とは失敗条件が異なるため、lastIndex を明示した小さな例で検証してください。
よくある失敗と確認手順
- パターン、フラグ、入力を別々に記録します。
- フラグを一つずつ追加し、一致数、開始位置、一致文字列を比較します。
- 先頭・末尾、改行の有無、大文字小文字、絵文字を含む境界例を試します。
gやyでは同じRegExpオブジェクトを連続実行し、lastIndexの変化も確認します。- 本番と同じJavaScriptメソッドで最終確認します。
入力に応じて反復回数が急増する、深い入れ子や曖昧な繰り返しを持つ複雑なパターンは、長い不一致入力でも時間を測ってください。すべての正規表現が危険という意味ではありませんが、外部入力を扱う場合は入力長の上限や単純なパターンへの分割も検討します。
参考資料
このガイドで使えるアプリ
関連ガイド
- 先読み、行頭・行末、単語境界など、文字を消費しない正規表現の一致位置と繰り返し処理を理解します。開発者向けregexzero-widthjavascript