RegExp() コンストラクター

RegExp() コンストラクターは RegExp オブジェクトを生成します。

正規表現について詳しく知りたい方は JavaScript ガイド正規表現 を参照してください。

試してみましょう

構文

js
new RegExp(pattern)
new RegExp(pattern, flags)
RegExp(pattern)
RegExp(pattern, flags)

メモ: RegExp()new があってもなくても呼び出すことができますが、効果が異なることがあります。返値を参照してください。

引数

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 (ふつうはサブクラスではないという意味)
  • flagsundefined である

その他のすべての場合においては、RegExp() を呼び出す際に new を使用しても使用しなくても、新しい RegExp オブジェクトが作成されます。pattern が正規表現の場合、新しいオブジェクトのソースpattern.source になります。それ以外の場合は、pattern文字列に変換されますflags 引数が undefined でない場合、新しいオブジェクトの flags は引数の値となり、そうでない場合、その flagspattern.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

関連情報