連載
» 2022年06月17日 05時00分 公開

正規表現のマッチングをカスタム化する――「フラグ」ECMAScriptで学ぶ正規表現(6)

正規表現の基本と、ECMAScript(JavaScript)における利用方法を紹介する連載。今回は、ECMAScript 2015以降で大幅に強化された、正規表現のマッチングをカスタム化するフラグについて。

[山内直(著)/山田祥寛(監修),WINGSプロジェクト]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「ECMAScriptで学ぶ正規表現」のインデックス

連載:ECMAScriptで学ぶ正規表現

 本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。具体的な利用方法は連載第1回を参考にしてください。

フラグとは?

 フラグ(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(フラグの状態は変更されない)
flag_property.js

グローバル検索を有効にする(g)

 gフラグは、これまでの連載で何度も登場したように、頻繁に使われるフラグです。与えられた正規表現パターンに対して、一致する限り何度もマッチングを試みます。gフラグを指定しない場合には、最初のマッチで処理を終了します。これはどちらが優れているというわけではなく、目的に応じて使い分ける必要があります。

match()メソッドとgフラグ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。