RegExp() コンストラクター
RegExp()
コンストラクターは RegExp
オブジェクトを生成します。
正規表現について詳しく知りたい方は JavaScript ガイド の 正規表現 を参照してください。
試してみましょう
構文
引数
pattern
-
正規表現のテキストです。他の
RegExp
オブジェクトであっても構いません。 flags
省略可-
指定された場合、
flags
は追加するフラグを含む文字列です。または、RegExp
オブジェクトがpattern
に提供された場合は、flags
の文字列はそのオブジェクトのフラグをすべて置き換えます(そしてlastIndex
は 0 にリセットされます)。flags
は以下の値を任意の組み合わせを含んだ文字列を指定することができます。d
(indices)-
部分文字列の一致にインデックスを生成します。
g
(global)-
最初に一致した後で停止せずに、一致するものをすべて探します。
i
(ignore case)-
照合時に、大文字小文字の違いを無視します。
m
(multiline)-
先頭および末尾を示す文字(
^
と$
)が、複数の行にまたがって機能します。すなわち、入力文字列全体の先頭および末尾だけでなく、それぞれの(\n
や\r
で区切られた)行の先頭および末尾に一致します。 s
(dotAll)-
.
が改行文字に一致できるようにします。 u
(unicode)-
pattern
を Unicode コードポイントの並びとして扱います。 v
(unicodeSets)-
文字列のプロパティだけでなく、文字クラスでも集合表記を可能にする
u
フラグのアップグレード版です。 y
(sticky)-
対象文字列中の正規表現の
lastIndex
プロパティによって示された位置からのみ照合するようになります。それより後の位置からの照合は試みません。
返値
RegExp(pattern)
は以下のすべてに該当すると、pattern
を直接返します。
RegExp()
がnew
なしで呼び出されたpattern
が正規表現であるpattern.constructor === RegExp
(ふつうはサブクラスではないという意味)flags
がundefined
である
その他のすべての場合においては、RegExp()
を呼び出す際に new
を使用しても使用しなくても、新しい RegExp
オブジェクトが作成されます。pattern
が正規表現の場合、新しいオブジェクトのソースは pattern.source
になります。それ以外の場合は、pattern
は文字列に変換されます。flags
引数が undefined
でない場合、新しいオブジェクトの flags
は引数の値となり、そうでない場合、その flags
は pattern.flags
になります(pattern
が正規表現の場合)。
例外
SyntaxError
-
以下のいずれかが成立すると発生します。
pattern
が有効な正規表現として解釈できない場合flags
に繰り返して使われた文字や、許可されている文字以外が含まれていた場合。
例
リテラル記法とコンストラクター
RegExp
オブジェクトを生成するのにリテラル記法とコンストラクターの 2 つの方法があります。
- リテラル記法はパターンを 2 本のスラッシュの間に取り、2 番目のスラッシュの後にオプションのフラグが続くものです。
- コンストラクター関数は文字列または
RegExp
オブジェクトを最初の引数として取り、2 番目の引数としてオプションのフラグの文字列を取ります。
以下の 3 つの式は、同じ正規表現を生成するものです。
js
/ab+c/i;
new RegExp(/ab+c/, "i"); // リテラル表記
new RegExp("ab+c", "i"); // コンストラクター
正規表現は、使用する前にコンパイルする必要があります。この処理により、より効率的に照合を行うことができます。コンパイルして RegExp
オブジェクトを取得するには 2 つの方法があります。
リテラル記法を使用すると、式が評価されるときに正規表現のコンパイルが行われた結果になります。一方、RegExp
オブジェクトのコンストラクターである new RegExp('ab+c')
は、正規表現を実行時にコンパイルする結果になります。
動的な入力から正規表現を構築したい場合は、文字列を最初の引数として RegExp()
コンストラクターを使用してください。
動的な入力から正規表現を構築
js
const breakfasts = ["bacon", "eggs", "oatmeal", "toast", "cereal"];
const order = "Let me get some bacon and eggs, please";
order.match(new RegExp(`\\b(${breakfasts.join("|")})\\b`, "g"));
// Returns ['bacon', 'eggs']
仕様書
Specification |
---|
ECMAScript Language Specification # sec-regexp-constructor |
ブラウザーの互換性
BCD tables only load in the browser