RegExp() コンストラクター
Baseline
広く利用可能
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。
RegExp() コンストラクターは RegExp オブジェクトを生成します。
正規表現について詳しく知りたい方は JavaScript ガイドの正規表現を参照してください。
試してみましょう
const regex1 = /\w+/;
const regex2 = new RegExp("\\w+");
console.log(regex1);
// 予想される結果: /\w+/
console.log(regex2);
// 予想される結果: /\w+/
console.log(regex1 === regex2);
// 予想される結果: false
構文
new RegExp(pattern)
new RegExp(pattern, flags)
RegExp(pattern)
RegExp(pattern, flags)
引数
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 つの式は、同じ正規表現を生成するものです。
/ab+c/i;
new RegExp(/ab+c/, "i"); // リテラル表記
new RegExp("ab+c", "i"); // コンストラクター
正規表現は、使用する前にコンパイルする必要があります。この処理により、より効率的に照合を行うことができます。コンパイルして RegExp オブジェクトを取得するには 2 つの方法があります。
リテラル記法を使用すると、式が評価されるときに正規表現のコンパイルが行われた結果になります。一方、RegExp オブジェクトのコンストラクターである new RegExp('ab+c') は、正規表現を実行時にコンパイルする結果になります。
動的な入力から正規表現を構築したい場合は、文字列を最初の引数として RegExp() コンストラクターを使用してください。
動的な入力から正規表現を構築
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']
仕様書
| 仕様書 |
|---|
| ECMAScript® 2027 Language Specification> # sec-regexp-constructor> |