JavaScript

RegExpコンストラクター

 編集:2022.08.23 by T.A.

パターンに従ったテキストを検索する正規表現オブジェクトを生成します。

正規表現について詳しく知りたい方は を参考にしてください。

構文

リテラル記法:

/pattern/flags

コンストラクター記法:

new RegExp(pattern[, flags])

ファクトリ記法:

RegExp(pattern[, flags])
pattern 正規表現のテキストです(パターン)。

ES5 以降では、別な RegExp オブジェクトまたはリテラルにすることができます(後者は 2 つの RegExp コンストラクター記法のみ)。パターンには を含めることができるため、文字列リテラルよりも広い範囲の値に一致させることができます。

flags 省略可。以下のように機能するフラグで、文字列です。

または、パターン用のオブジェクトが提供された場合は flags の文字列は他のオブジェクトのフラグを置き換えます(そして lastIndex は 0 にリセットされます)(ES2015以降)¶詳細不明。

flags は以下の値を任意の組み合わせが可能です:

flags 意味
g グローバルマッチ。最初のマッチの後に止まることなくすべての一致するものを探す。
i 大文字・小文字の無視。u フラグが有効な場合は、Unicode による大文字・小文字の扱いを行います。
m 複数行。先頭および終端を示す文字「^」と「$」が、複数の行にわたって機能します。すなわち、入力文字列全体の先頭および終端だけでなく、「\n」や「\r」を解釈し、各行の先頭および末尾に一致するようになります。
s "dotAll"。patternの「.」を改行文字として一致させることもできるようになります。
u unicode。パターンを Unicode コードポイントの並びとして扱います(も参照)。
y 粘着的(sticky)。lastIndex プロパティによって示された位置からの一致を試みるようになる。→RegExp.exec()
リテラル記法とコンストラクター

RegExp オブジェクトを生成するのにリテラル記法とコンストラクターの2つの方法があります。

以下の3つの式は、同じ正規表現を生成するものです:

var RE=/ab+c/i;
var RE=new RegExp(/ab+c/, 'i'); // リテラル表記¶
var RE=new RegExp('ab+c', 'i'); // コンストラクター

リテラル記法は、式が評価されるときに正規表現をコンパイルした結果となります。正規表現が変化しない場合はリテラル記法を使用してください。例えば、ループで使用される正規表現を構築するためにリテラル記法を使用した場合、正規表現は反復ごとに再コンパイルされません。

正規表現オブジェクトのコンストラクター、例えば new RegExp('ab+c') は、正規表現の実行時にコンパイルを行います。コンストラクター関数は、正規表現のパターンが変化することがわかっている場合や、パターンがわからず、ユーザー入力などの別のソースから取得している場合に使用してください。

g フラグ:

RE=/a/g;
D="abcabc".match(RE); //=[object]:a,a
	//0=[string]:a
	//1=[string]:a

i フラグ:

RE=/a/i;
D="ABCabc".match(RE); //=[object]:A
	//0=[string]:A
	//index=[number]:0
	//input=[string]:ABCabc
	//groups=[undefined]:undefined

RE=/a/gi;
D="ABCabc".match(RE); //=[object]:A,a
	//0=[string]:A
	//1=[string]:a

m フラグ:

RE=/^a/g; //「^」先頭を意味する
D="abc\rabc".match(RE); //=[object]:a
	//0=[string]:a
RE=/^a/gm; //「^」先頭を意味する
D="abc\rabc".match(RE); //=[object]:a,a
	//0=[string]:a
	//1=[string]:a

s フラグ:

RE=/a.b/g;
D="a\rba.b".match(RE); //=[object]:a.b
	//0=[string]:a.b

RE=/a.b/sg;
D="a\rba.b".match(RE); //=[object]:a b,a.b
	//0=[string]:a b
	//1=[string]:a.b

u フラグ:

RE=/\u3042/u;
D="あいう".match(RE); //=[object]:あ
	//0=[string]:あ
	//index=[number]:0
	//input=[string]:あいう
	//groups=[undefined]:undefined

RE=/\u3042/;
D="あいう".match(RE); //=[object]:あ
	//0=[string]:あ
	//index=[number]:0
	//input=[string]:あいう
	//groups=[undefined]:undefined

S="Приключения Алисы в Стране чудес";
RE=/([\u0000-\u0019\u0021-\uFFFF])+/ug;
D=S.match(RE); //=[object]:Приключения,Алисы,в,Стране,чудес
	//0=[string]:Приключения
	//1=[string]:Алисы
	//2=[string]:в
	//3=[string]:Стране
	//4=[string]:чудес

S="Приключения Алисы в Стране чудес";
RE=/([\u0000-\u0019\u0021-\uFFFF])+/g;
D=S.match(RE); //=[object]:Приключения,Алисы,в,Стране,чудес
	//0=[string]:Приключения
	//1=[string]:Алисы
	//2=[string]:в
	//3=[string]:Стране
	//4=[string]:чудес

変わりないようだが。

y フラグ:

RE=/a/y;
D=RE.exec('abcabc'); 	//=[object]:a
	//0=[string]:a
	//index=[number]:0
	//input=[string]:abcabc
	//groups=[undefined]:undefined
D=RE.lastIndex; //=[number]:1
D=RE.exec('abcabc'); 	//=[object]:null
D=RE.lastIndex; //=[number]:0
RE.lastIndex=3;
D=RE.exec('abcabc'); 	//=[object]:a
	//0=[string]:a
	//index=[number]:3
	//input=[string]:abcabc
	//groups=[undefined]:undefined
D=RE.lastIndex; //=[number]:4

テスト