JavaScript 速習チュートリアル

JS 正規表現フラグ

1. RegExp修飾子フラグ(Flags)

フラグは、正規表現パターンの動作をカスタマイズするためのパラメータです。例えば、大文字・小文字を区別しない検索や、文字列全体を対象としたグローバル検索などを指定できます。

/パターン/フラグ

2. JavaScript 正規表現フラグ一覧

(2025年7月改訂)

フラグ説明
/dサブストリング(部分文字列)のマッチングを実行(2022年導入)
/gグローバルマッチを実行(すべてのマッチ箇所を検索)
/i大文字・小文字を区別しないマッチングを実行
/mマルチライン(複数行)マッチングを実行
/s.(ドット)が改行文字にもマッチすることを許可(2018年導入)
/uUnicodeサポートを有効化(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;