修飾子: (?ims-ims:...)
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
構文
(?flags1:pattern)
(?flags1-flags2:pattern)
メモ: JavaScript には、パターンが修飾子グループの中に置かれる「境界付き」の修飾子形式しかありません。修飾子に対応している他のほとんどの言語には、「境界なし」の形式があり、この形式では、修飾子は最も近い包含グループが終わるまで適用されます。
引数
flags1
省略可-
有効にするフラグの文字列です。
i
、m
、s
を任意に組み合わせて含まれています。 flags2
省略可-
無効にするフラグの文字列です。
i
、m
、s
を任意に組み合わせることができますが、flags1
に含まれるフラグは含めることはできません。 pattern
-
論理和を含む、正規表現リテラルで使用できる何らかの文字で構成されるパターンです。
解説
一部のフラグは、正規表現の構文要素の意味を変更します。
i
フラグは、すべてのリテラル文字および文字クラスを暗黙的に小文字にして、正規表現が大文字と小文字を区別しないようにします。m
フラグは、入力境界アサーション^
および$
の動作を変更し、入力文字列の開始と終了に加えて、各行の開始と終了にも一致するようにします。s
フラグは、ワイルドカード文字.
の動作を変更し、改行文字を含むすべての文字に一致するようにします。
これらの変更を正規表現パターンの特定の部分でのみ効果にしたい場合があります。その場合は、その部分を修飾子で囲みます。例えば、次のようにします。
/(?i:Hello) world/;
この正規表現では、 i
フラグはパターンの Hello
部分に対してのみ有効です。 world
部分は大文字と小文字が区別されます。したがって、 Hello world
、hello world
、HELLO world
には一致しますが、 HELLO WORLD
には一致しません。 i
フラグをグローバルに有効にして、 world
部分に対して無効にすることで、次の式と同等になります。
/Hello (?-i:world)/i;
flags1
および flags2
引数には、i
、m
、s
を任意に組み合わせて含めることができます。ただし、 flags1
と flags2
では、フラグはすべて固有のものである必要があります。つまり、フラグを 2 回有効または無効にしたり、フラグを有効にしてすぐに無効にしたりすることはできません。
引数 flags1
および flags2
はオプションですが、少なくとも 1 つは空ではない必要があります。 (?flags1-:pattern)
は、フラグのみを有効にする修飾子です((?flags1:pattern)
と同じです)。 (?-flags2:pattern)
は、フラグのみを無効にする修飾子です。 (?:pattern)
は単なる非キャプチャグループとなり、 (?-:pattern)
は構文エラーとなります。
それ以外のフラグはこの修飾子では意味を成さないため、記載すると構文エラーになります。
例
文字列の先頭でのみ複数行の書式を照合
以下の正規表現は、複数行の文字列の書式を定義します。最初の ^
は、(?-m:)
修飾子の中に含まれているため、入力文字列全体の先頭を表しますが、それ以外の ^
文字はすべて行の先頭を表します。
const pattern = /(?-m:^)---\n^title:.*^slug:.*^---/ms;
const input = `---
title: "Modifier: (?ims-ims:...)"
slug: Web/JavaScript/Reference/Regular_expressions/Modifier
---`;
pattern.test(input); // true
// 文字列の先頭の余分な改行
const input2 = `\n${input}`;
pattern.test(input2); // false
特定の単語を大文字と小文字を区別せずに照合
foo
または bar
という変数宣言をすべて探しているとします(これらは不適切な名前だからです)。この単語は、大文字でも小文字でも現れますが、キーワードは常に小文字であることがわかっているため、次のようにすることができます。
const pattern = /(?:var|let|const) (?i:foo|bar)\b/;
pattern.test("let foo;"); // true
pattern.test("const BAR = 1;"); // true
pattern.test("Let foo be a number"); // false
仕様書
Specification |
---|
Unknown specification # syntax |