正規表現の基本と、ECMAScript(JavaScript)における利用方法を紹介する連載。今回は、ECMAScript 2015以降で大幅に強化された、正規表現のマッチングをカスタム化するフラグについて。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
フラグ(flag)とは、「旗」という意味です。旗には、掲げたり下げたりといった状態がありますが、転じてコンピュータの世界ではOn/Offの状態を表すものをフラグと称しています。正規表現におけるフラグは、マッチングにおいてある機能を働かせるか、働かせないかを表し、パターン修飾子とも呼ばれます。ECMAScriptでは表1に挙げるフラグがサポートされています(ESはECMAScriptの略)。
フラグ | 概要 | プロパティ |
---|---|---|
g | グローバル検索を有効にする | global |
i | 大文字と小文字を同一に扱う | ignoreCase |
m | 複数行マッチを有効にする | multiline |
y | Sticky検索を有効にする(ES2015以降) | sticky |
s | ドット(.)を改行文字にも一致させる(ES2018以降) | dotAll |
u | Unicodeエスケープを有効にする(ES2018以降) | unicode |
d | マッチした範囲を保持する(ES2022以降) | hasIndices |
表1 フラグの一覧 |
このうち、uフラグについては第4回で取り上げたので、今回は紹介を割愛します。uフラグは、UnicodeコードポイントエスケープとUnicodeプロパティエスケープという記法を使用する場合に必要なフラグでした。
フラグは、正規表現パターンの最後に記述します。複数のフラグを記述でき、基本的に小文字で記述します。順番は関係ありません。以下は、g、i、mという3つのフラグを記述した例です。
const regexp = /.../gim;
プロパティは、RegExpオブジェクトにおけるフラグの状態を表します。読み出し専用で、フラグの状態を変更することはできません。変更するコードを書いてもエラーにはなりませんが、フラグの状態は変更されません。以下の「flag_property.js」は、これを確かめる例です。
let regexp = /.+/g; console.log(regexp.global); // true regexp.global = false; console.log(regexp.global); // true(フラグの状態は変更されない)
gフラグは、これまでの連載で何度も登場したように、頻繁に使われるフラグです。与えられた正規表現パターンに対して、一致する限り何度もマッチングを試みます。gフラグを指定しない場合には、最初のマッチで処理を終了します。これはどちらが優れているというわけではなく、目的に応じて使い分ける必要があります。
Copyright © ITmedia, Inc. All Rights Reserved.