JavaScriptの正規表現フラグについて
このページでは、JavaScriptにおける正規表現のフラグについて、それぞれの機能と具体例を交えながら解説します。以下の見出しから、各フラグの詳細にジャンプできます。
- 1. flags プロパティ
- 2. global フラグ (g)
- 3. ignoreCase フラグ (i)
- 4. multiline フラグ (m)
- 5. unicode フラグ (u)
- 6. sticky フラグ (y)
- 7. dotAll フラグ (s)
- 8. hasIndices フラグ (d)
1. flags プロパティ
regexp.flags
プロパティは、正規表現オブジェクトに設定されているすべてのフラグを文字列として返します。このプロパティは読み取り専用で、正規表現を理解する際に便利です。
const regex = /hello/gi;
console.log(regex.flags); // "gi"
この例では、正規表現にg
(global)とi
(ignoreCase)が設定されています。それを確認できます。
2. global フラグ (g)
g
フラグを設定すると、正規表現のマッチが最初の1つだけでなく、対象文字列全体を検索します。
const regex = /hello/g;
const str = "hello world, hello universe";
console.log(str.match(regex)); // ["hello", "hello"]
フラグを指定しない場合、最初のマッチだけが返されます。
const regex = /hello/;
console.log(str.match(regex)); // ["hello"]
3. ignoreCase フラグ (i)
i
フラグを設定すると、大文字と小文字を区別しなくなります。
const regex = /hello/i;
console.log(regex.test("Hello")); // true
この例では、Hello
もマッチしています。
4. multiline フラグ (m)
m
フラグを設定すると、^ と $ が行頭と行末を示すようになります。
const regex = /^hello/m;
const str = "world\nhello";
console.log(str.match(regex)); // ["hello"]
フラグがない場合、^ は文字列全体の先頭のみを意味します。
5. unicode フラグ (u)
u
フラグは、Unicodeエスケープシーケンスやコードポイントに対応する正規表現を有効にします。
const regex = /\u{1F600}/u;
const str = "😀";
console.log(regex.test(str)); // true
この例では、絵文字にマッチします。
6. sticky フラグ (y)
y
フラグを使用すると、検索は現在の位置からのみ行われます。
const regex = /hello/y;
regex.lastIndex = 6;
const str = "world hello";
console.log(regex.test(str)); // true
lastIndex
プロパティを設定することで、特定の位置から検索できます。
7. dotAll フラグ (s)
s
フラグを設定すると、.
は改行文字にもマッチします。
const regex = /hello.world/s;
const str = "hello\nworld";
console.log(regex.test(str)); // true
フラグがない場合、.
は改行にマッチしません。
8. hasIndices フラグ (d)
d
フラグを使用すると、マッチしたインデックス情報を取得できます。このフラグは正規表現がより詳細な結果を返すために役立ちます。
const regex = /hello/d;
const str = "hello world";
const match = regex.exec(str);
console.log(match.indices); // [[0, 5]]
この例では、hello
のインデックス範囲が配列として返されています。
以上がJavaScriptの正規表現フラグに関する詳細な解説です。正規表現を効果的に利用するために、各フラグを適切に活用してください。