JS 正規表現フラグ
1. RegExp修飾子フラグ(Flags)
フラグは、正規表現パターンの動作をカスタマイズするためのパラメータです。例えば、大文字・小文字を区別しない検索や、文字列全体を対象としたグローバル検索などを指定できます。
/パターン/フラグ
2. JavaScript 正規表現フラグ一覧
(2025年7月改訂)
| フラグ | 説明 |
|---|---|
| /d | サブストリング(部分文字列)のマッチングを実行(2022年導入) |
| /g | グローバルマッチを実行(すべてのマッチ箇所を検索) |
| /i | 大文字・小文字を区別しないマッチングを実行 |
| /m | マルチライン(複数行)マッチングを実行 |
| /s | .(ドット)が改行文字にもマッチすることを許可(2018年導入) |
| /u | Unicodeサポートを有効化(2015年導入) |
| /v | /uフラグのアップグレード版。より高度なUnicode対応を実現(2025年導入) |
| /y | 「スティッキー(粘着)」検索を実行(2015年導入) |
3. フラグの構文: /pattern/flags
/: 正規表現の開始デリミタpattern: 正規表現(検索条件)/: 正規表現の終了デリミタflags: 1つ以上の単一修飾フラグ
4. RegExp /g フラグ(Global)
/g フラグは、最初に見つかった箇所だけでなく、パターンに一致するすべての箇所にマッチします。
4.1 使用例
文字列内のすべての "is" をグローバル検索する例:
let text = "Is this all there is?";
const pattern = /is/g;
let result = text.match(pattern);5. RegExp /i フラグ(Insensitive)
/i フラグは、マッチングにおいて大文字と小文字を区別しません。例えば /abc/i は "abc"、"AbC"、"ABC" のすべてにマッチします。
5.1 使用例
文字列の中から "volardev" を大文字・小文字の区別なく検索する例:
let text = "Visit Volardev";
const pattern = /volardev/i;
let result = text.match(pattern);6. RegExp /d フラグ
/d フラグは、マッチした文字列の開始位置と終了位置(インデックス)を取得することを指定します。
6.1 使用例
"aa" または "bb" で始まる、あるいは終わるすべてのサブテキストにマッチさせる例:
let text = "aaaabb";
const pattern = /(aa)(bb)/d;
let result = text.match(pattern);7. RegExp /s フラグ(Single line/DotAll)
/s フラグを指定すると、.(ドット)メタ文字が改行文字(\n)を含むあらゆる文字にマッチするようになります。
7.1 使用例
/s フラグがない場合、\n は .(ワイルドカード)にマッチしません:
let text = "Line\nLine.";
const pattern = /Line./gs;
let result = text.match(pattern);8. RegExp /y フラグ(Sticky)
/y フラグは、RegExpオブジェクトの lastIndex プロパティから「スティッキー」検索を実行します。このフラグを使用すると、前回のマッチが終了した正確な位置から次のマッチを開始させることができます。
8.1 使用例
let text = "abc def ghi";
const pattern = /\w+/y;
// ポジション4(スペースの後)からマッチングを開始
pattern.lastIndex = 4;
let result = text.match(pattern);特定のポジションからのマッチを許可するには、/y フラグを設定する必要があります。以下の例では正しく動作しません:
let text = "abc def ghi";
const pattern = /\w+/;
// ポジション4から開始しようとしても、/y がないため無視される
pattern.lastIndex = 4;
let result = text.match(pattern);※上記の例で使用されているメタ文字 /\w+/ は「任意の単語にマッチする」という意味です。詳細は後の章で解説します。
9. RegExp /u フラグ(Unicode)
/u フラグは、正規表現において完全なUnicodeサポートを有効にします。デフォルトでは、JavaScriptのRegExpは4バイトのUnicode文字(絵文字や珍しい記号など)を、2つの別々の2バイト「サロゲート」コードユニットとして扱います。
/u フラグを使用すると、パターンをUnicodeコードポイントのシーケンスとして処理します。これは、基本多言語面(BMP)以外の文字を正しく扱うために重要です。
9.1 使用例
let text = "䷀";
const pattern = /\u{04DC0}/u;
// true を返します:
let result = pattern.test(text);/u フラグがない場合、正規表現はUnicodeを正しく認識できません。
let text = "䷀";
const pattern = /\u{04DC0}/;
// false を返します:
let result = pattern.test(text);なお、JavaScript 2025では、/u フラグの「アップグレード版」として /v フラグが導入されました。
10. RegExp /v フラグ(Unicode Sets)
/v フラグは、より優れたUnicodeサポートを提供する /u フラグの進化版です。これにより、さらに多くのUnicode関連機能が利用可能になります。
主な新機能:
\pエスケープシーケンスが、単一の文字だけでなく文字列にもマッチできるようになりました。- 文字クラスがアップグレードされ、積集合(intersection)、和集合(union)、差集合(subtraction)の構文が使用可能になったほか、複数のUnicode文字へのマッチングもサポートされました。
10.1 使用例
let text = "Hello 😄";
const pattern = /\p{Emoji}/v;
// true を返します:
let result = pattern.test(text);/v フラグがない場合、Unicode対応が不十分なため正しく動作しません。
let text = "Hello 😄";
const pattern = /\p{Emoji}/;
// false を返します:
let result = pattern.test(text);11. RegExp グループモディファイア (?flag)
(?flag) 構文は、グループモディファイア(インラインフラグ修飾子)です。これにより、パターン全体ではなく、パターンの一部に対してのみフラグを適用・変更することができます。
(?flags:pattern) と記述することで、そのグループ内のパターンに対してのみフラグを有効にします。
11.1 使用例
以下の例では、i フラグはパターンの "Volardev" 部分に対してのみ有効になります。
let text = "Volardev tutorials.";
const pattern = /(?i:Vlardev) tutorials/;
// true を返します:
let result = pattern.test(text);もう一つの例(大文字・小文字の不一致による判定):
let text = "Volardev Tutorials.";
const pattern = /(?i:Volardev) tutorials/;
// false を返します:
let result = pattern.test(text);12. JavaScript 正規表現フラグのプロパティ
(2025年7月改訂)
以下のプロパティを使用すると、正規表現オブジェクトにどのフラグが設定されているかを確認できます。
| プロパティ | 説明 |
|---|---|
| global | /g フラグが設定されていれば true を返します |
| hasIndices | /d フラグが設定されていれば true を返します |
| ignoreCase | /i フラグが設定されていれば true を返します |
| multiline | /m フラグが設定されていれば true を返します |
| dotAll | /s フラグが設定されていれば true を返します |
| sticky | /y フラグが設定されていれば true を返します |
| unicode | /u フラグが設定されていれば true を返します |
| unicodeSets | /v フラグが設定されていれば true を返します |
12.1 dotAll プロパティ
dotAll プロパティは、/s フラグが設定されている場合に true を返します。
const pattern = /Volardev/s;
let result = pattern.dotAll;12.2 global プロパティ
global プロパティは、/g フラグが設定されている場合に true を返します。
const pattern = /Volardev/g;
let result = pattern.global;12.3 hasIndices プロパティ
hasIndices プロパティは、/d フラグが設定されている場合に true を返します。
const pattern = /Volardev/d;
let result = pattern.hasIndices;12.4 ignoreCase プロパティ
ignoreCase プロパティは、/i フラグが設定されている場合に true を返します。
const pattern = /Volardev/i;
let result = pattern.ignoreCase;12.5 multiline プロパティ
multiline プロパティは、/m フラグが設定されている場合に true を返します。
const pattern = /Volardev/m;
let result = pattern.multiline;12.6 sticky プロパティ
sticky プロパティは、/y フラグが設定されている場合に true を返します。
const pattern = /Volardev/y;
let result = pattern.sticky;12.7 unicode プロパティ
unicode プロパティは、/u フラグが設定されている場合に true を返します。
let text = "䷀";
const pattern = /\u{04DC0}/u;
let result = pattern.unicode;12.8 unicodeSets プロパティ
unicodeSets プロパティは、/v フラグが設定されている場合に true を返します。
let text = "Hello 😄";
const pattern = /\p{Emoji}/v;
let result = pattern.unicodeSets;