正規表現フラグの解説 — 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文字を扱うなど、正規表現エンジンのパターン処理を制御する必要がある場合。