正規表現フラグの解説 — JavaScriptの g, i, m, s, u, y

JavaScriptの正規表現フラグの完全ガイド:global (g)、case-insensitive (i)、multiline (m)、dotall (s)、unicode (u)、sticky (y)。各フラグの使い方とタイミング。

Flags

詳細な説明

JavaScriptの正規表現フラグ

フラグは正規表現エンジンがパターンを処理する方法を変更します。JavaScriptは6つのフラグをサポートしており、それぞれがマッチング動作の異なる側面を制御します。

フラグリファレンス

フラグ 名前 効果
g Global 最初だけでなくすべてのマッチを見つける
i Case-insensitive マッチ時に大文字小文字を無視
m Multiline ^$ が行境界にマッチ
s Dotall . が改行文字にマッチ
u Unicode 完全なUnicodeサポートを有効化
y Sticky lastIndexの位置でのみマッチ

グローバルフラグ (g)

g なしでは、正規表現は最初のマッチで停止します。g ありでは、すべてのマッチを見つけます:

"banana".match(/a/g)  // ["a", "a", "a"]
"banana".match(/a/)   // ["a"](最初のみ)

大文字小文字無視フラグ (i)

パターン全体を大文字小文字無視にします:

/hello/i.test("Hello")  // true
/hello/i.test("HELLO")  // true

複数行フラグ (m)

^$ を文字列境界ではなく行境界にマッチするように変更します:

"line1\nline2".match(/^line/gm)  // ["line", "line"]
"line1\nline2".match(/^line/g)   // ["line"](最初のみ)

Dotallフラグ (s)

. を改行文字(\n\r)にもマッチするようにします:

/a.b/s.test("a\nb")   // true
/a.b/.test("a\nb")    // false

Unicodeフラグ (u)

サロゲートペアやUnicodeプロパティエスケープを含む完全なUnicodeサポートを有効にします:

/\u{1F600}/u.test("\u{1F600}")  // true(絵文字)
/\p{Letter}/u.test("\u{00E9}")     // true(アクセント付き文字)

スティッキーフラグ (y)

lastIndex が示す位置でのみマッチします:

const re = /\d+/y;
re.lastIndex = 4;
re.exec("abc 123")  // インデックス4から始まる "123" にマッチ

フラグの組み合わせ

フラグは組み合わせ可能です:/pattern/gims。最もよく使う組み合わせは gi(グローバル、大文字小文字無視)と gm(グローバル、複数行)です。

ユースケース

文字列内のすべてのマッチを見つける、大文字小文字の違いを無視する、複数行テキストを処理する、または絵文字のようなUnicode文字を扱うなど、正規表現エンジンのパターン処理を制御する必要がある場合。

試してみる — Regex Cheat Sheet

フルツールを開く