RegExp コンストラクターは、パターンに従ったテキストにマッチする正規表現オブジェクトを生成します。
正規表現を詳しく知りたい方は JavaScript ガイド の 正規表現 を参考にしてください。
このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力していただける場合は、 https://github.com/mdn/interactive-examples をクローンしてプルリクエストを送信してください。
構文
リテラル記法およびコンストラクタ記法を使用できます:
/pattern/flags new RegExp(pattern[, flags]) RegExp(pattern[, flags])
引数
pattern- 正規表現のテキスト、または ES5 以降では、その他の RegExp オブジェクト (またはリテラル) (後者は 2 つの RegExp コンストラクターのみ) です。パターンには特殊文字を含めることができるため、文字列リテラルよりも広い範囲の値にマッチすることができます。
flags-
指定された場合、
flagsは追加するフラグを含む文字列、またはパターン用のオブジェクトが供給された場合はflagsの文字列は他のオブジェクトのフラグを置き換えます (そしてlastIndexは 0 にリセットされます) (ES2015以降)。flagsが指定されず正規表現オブジェクトが供給されない場合、オブジェクトのフラグ (とlastIndex) はコピーされます。flagsは以下の値を任意の組み合わせで含んだ文字列で指定できます。g- グローバルなマッチ。最初のマッチの後に止まることなくすべてのマッチを探す。
i- 大文字・小文字の無視。
uフラグが有効の場合、 Unicode による大文字・小文字の扱いを行います。 m- 複数行に渡るマッチ。先頭および終端を示す文字 (^ や $) が、複数の行で機能します(すなわち、入力文字列全体の先頭および終端だけでなく各々の行 (\n や \r で区切られる) の先頭および末尾にマッチします)。
s- ドットオール。
.は改行文字にマッチします。 u- Unicode。パターンを Unicode コードポイントの羅列として扱います (Binary 文字列も参照)。
y- 先頭固定 。対象文字列中の正規表現の
lastIndexプロパティによって示された位置からのみマッチするようになります (それより後の位置からのマッチは試みません)。
解説
RegExp オブジェクトを作成する場合、正規表現リテラルを利用する方法とコンストラクター関数を利用する方法の 2 通りがあります。正規表現リテラルではスラッシュで囲む代わり、引用符は必要ありません。コンストラクタ関数を利用する場合はスラッシュで囲まない代わりに引用符が必要になります。
以下の例では、同じ正規表現オブジェクトが作成されます。:
/ab+c/i;
new RegExp(/ab+c/, 'i'); // リテラル記法
new RegExp('ab+c', 'i'); // コンストラクター
リテラル記法では、正規表現が評価されるときにコンパイルを行います。正規表現が不変である場合に、リテラル記法を使用してください。例えばループ内で使用する正規表現を生成するためにリテラル記法を使用すると、反復処理のたびに正規表現を再コンパイルすることはありません。
new RegExp('ab+c') といった正規表現オブジェクトのコンストラクタは、実行時に正規表現をコンパイルします。正規表現パターンが変わることがわかっている場合や、パターンが不明でありユーザー入力など別のソースからパターンを取得する場合は、コンストラクタ関数を使用してください。
ECMAScript 6 より、第 1 引数が RegExp で第 2 引数に flags を指定する場合 (new RegExp(/ab+c/, 'i')) に TypeError ("can't supply flags when constructing one RegExp from another") が発生しません。代わりに、引数を元に新たな RegExp を生成します。
コンストラクタ関数を使用する場合は、通常の文字エスケープ規則 (文字列内に特殊文字が含まれるとき、前に \ を付加する) が必須です。例えば、以下 2 つの構文は同等です:
var re = /\w+/;
var re = new RegExp('\\w+');
プロパティ
RegExp.prototype- すべてのオブジェクトへプロパティを追加することを許可します。
RegExp.lengthRegExp.lengthの値は 2 です。get RegExp[@@species]- 派生オブジェクトを生成するために使用するコンストラクタ関数です。
RegExp.lastIndex- 次のマッチングを開始する位置です。
メソッド
グローバル RegExp オブジェクトは、自分自身のメソッドを持っていませんが、プロトタイプチェーンを通していくつかのメソッドを継承しています。
RegExp プロトタイプオブジェクトとインスタンス
プロパティ
非推奨の RegExp プロパティも参照してください。
RegExp プロパティのいくつかは(Perl ライクな)長い名前と短い名前の両方を持っていることに注意してください。【訳注: それらは 1.5 以前のバージョンでの実装であり、非推奨の機能です。】どちらの名前でも常に同じ値を参照します。Perl は JavaScript の正規表現のモデルとなっているプログラミング言語です。
RegExp.prototype.constructor- オブジェクトのプロトタイプを生成する関数を指定します。
RegExp.prototype.flagsRegExpオブジェクトのフラグから成る文字列です。RegExp.prototype.dotAll.が改行文字にマッチするかどうか。RegExp.prototype.global- 対象文字列で可能なすべてのマッチに対して正規表現をテストするか、それとも、最初のマッチに対してのみテストするどうかのフラグです。
RegExp.prototype.ignoreCase- 文字列でのマッチを適用する際に、大文字と小文字の違いを無視するかどうかのフラグです。
RegExp.prototype.multiline- 複数行に渡って文字列を検索するかどうかのフラグです。
RegExp.prototype.source- パターンのテキストです。
RegExp.prototype.sticky- 検索が先頭固定 (sticky)かどうかのフラグです。
RegExp.prototype.unicode- Unicode 機能が有効かどうかのフラグです。
メソッド
グローバル RegExp オブジェクトは、自分自身のメソッドを持っていませんが、プロトタイプチェーンを通していくつかのメソッドを継承しています。
例
データフォーマットを変更するための正規表現の使用
以下のスクリプトは、String インスタンスから継承された replace() メソッドを使用して、first last 形式のフォーマットでの名前にマッチさせ、last, first 形式のフォーマットで出力しています。置換テキスト中で、そのスクリプトは、$1 と $2 を使用して、それぞれ対応する正規表現パターンでマッチする括弧がキャプチャした結果を指定しています。
var re = /(\w+)\s(\w+)/; var str = 'John Smith'; var newstr = str.replace(re, '$2, $1'); console.log(newstr);
これは、"Smith, John" を表示します。
正規表現を使用してさまざまな行末/行の終端/改行で行を分割する
デフォルトの行末は、プラットフォーム (Unix、Windows など) によって異なります。この例で実行する行分割は、あらゆるプラットフォームで動作します。
var text = 'Some text\nAnd some more\r\nAnd yet\rThis is the end'; var lines = text.split(/\r\n|\r|\n/); console.log(lines); // logs [ 'Some text', 'And some more', 'And yet', 'This is the end' ]
正規表現内のパターンの順序が重要であることに注意してください。
複数行で正規表現を使用する
var s = 'Please yes\nmake my day!'; s.match(/yes.*day/); // Returns null s.match(/yes[^]*day/); // Returns ["yes\nmake my day"]
"sticky" フラグ付きの正規表現の使用
sticky フラグは、対象文字列で RegExp.prototype.lastIndex からマッチングを試みることにより、正規表現の sticky マッチングを実行することを示します。
var str = '#foo#'; var regex = /foo/y; regex.lastIndex = 1; regex.test(str); // true regex.lastIndex = 5; regex.test(str); // false (lastIndex is taken into account with sticky flag) regex.lastIndex; // 0 (reset after match failure)
正規表現と Unicode 文字
上の表にもある通り、\w や \W は ASCII 文字にのみマッチします。具体的には 'a' から 'z' 、'A' から 'Z' 、0 から 9 および '_' です。キリル語やヘブライ語で使われるような非 ASCII 文字にマッチさせるには \uhhhh 形式 ('hhhh' の部分は 16進表記の Unicode 値) を使ってください。この例は、文字列全体から Unicode 文字列だけを抜き出す方法をデモしています。
var text = 'Образец text на русском языке'; var regex = /[\u0400-\u04FF]+/g; var match = regex.exec(text); console.log(match[0]); // logs 'Образец' console.log(regex.lastIndex); // logs '7' var match2 = regex.exec(text); console.log(match2[0]); // logs 'на' [did not log 'text'] console.log(regex.lastIndex); // logs '15' // and so on
Unicode プロパティエスケープ機能は \p{scx=Cyrl} のように単純な表記を可能にする解決策を導入しています。スクリプト別の完全な Unicode コードブロック (範囲) を知ることができる外部リソースも、 Regexp-Unicode-block などがあります。
URL からサブドメイン名を抽出する
var url = 'http://xxx.domain.com'; console.log(/[^.]+/.exec(url)[0].substr(7)); // logs 'xxx'
仕様書
| 仕様書 | 状態 | 備考 |
|---|---|---|
| ECMAScript (ECMA-262) RegExp の定義 |
現行の標準 | |
| ECMAScript 2015 (6th Edition, ECMA-262) RegExp の定義 |
標準 | 第 1 引数が RegExp で第 2 引数も指定したとき、RegExp で例外が発生しないようになりました。Unicode および sticky フラグを導入。 |
| ECMAScript 5.1 (ECMA-262) RegExp の定義 |
標準 | |
| ECMAScript 3rd Edition (ECMA-262) | 標準 | 初回定義。 JavaScript 1.1 で実装。 |
ブラウザーの互換性
| デスクトップ | モバイル | サーバー | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
RegExp | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 4 | Opera 完全対応 5 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
RegExp() constructor | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 4 | Opera 完全対応 5 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
compile | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 4 | Opera 完全対応 6 | Safari 完全対応 3.1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 2 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
dotAll | Chrome 完全対応 62 | Edge 完全対応 79 | Firefox 未対応 なし | IE 未対応 なし | Opera 完全対応 49 | Safari 完全対応 12 | WebView Android 完全対応 62 | Chrome Android 完全対応 62 | Firefox Android 未対応 なし | Opera Android 完全対応 46 | Safari iOS 完全対応 12 | Samsung Internet Android 完全対応 8.0 | nodejs
完全対応
8.10.0
|
exec | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 4 | Opera 完全対応 5 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
flags | Chrome 完全対応 49 | Edge 完全対応 79 | Firefox 完全対応 37 | IE 未対応 なし | Opera 完全対応 39 | Safari 完全対応 9 | WebView Android 完全対応 49 | Chrome Android 完全対応 49 | Firefox Android 完全対応 37 | Opera Android 完全対応 41 | Safari iOS 完全対応 9 | Samsung Internet Android 完全対応 5.0 | nodejs 完全対応 6.0.0 |
global | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 5.5 | Opera 完全対応 5 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
ignoreCase | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 5.5 | Opera 完全対応 5 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
RegExp.input ($_) | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 5.5 | Opera 完全対応 15 | Safari 完全対応 3 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 14 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
lastIndex | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 5.5 | Opera 完全対応 5 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
RegExp.lastMatch ($&) | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 5.5 | Opera 完全対応 10.5 | Safari 完全対応 3 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 11 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
RegExp.lastParen ($+) | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 5.5 | Opera 完全対応 10.5 | Safari 完全対応 3 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 11 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
RegExp.leftContext ($`) | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 5.5 | Opera 完全対応 8 | Safari 完全対応 3 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
lookbehind assertions ((?<= ) and (?<! )) | Chrome 完全対応 62 | Edge 完全対応 79 | Firefox
未対応
なし
| IE 未対応 なし | Opera 完全対応 49 | Safari 未対応 なし | WebView Android 完全対応 62 | Chrome Android 完全対応 62 | Firefox Android
未対応
なし
| Opera Android 完全対応 46 | Safari iOS 未対応 なし | Samsung Internet Android 完全対応 8.0 | nodejs 完全対応 8.10.0 |
multiline | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 5.5 | Opera 完全対応 5 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
RegExp.$1-$9 | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 4 | Opera 完全対応 5 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
| Named capture groups | Chrome 完全対応 64 | Edge 完全対応 79 | Firefox 未対応 なし | IE 未対応 なし | Opera 完全対応 51 | Safari 完全対応 11.1 | WebView Android 完全対応 64 | Chrome Android 完全対応 64 | Firefox Android 未対応 なし | Opera Android 完全対応 47 | Safari iOS 完全対応 11.3 | Samsung Internet Android 完全対応 9.0 | nodejs
完全対応
10.0.0
|
Unicode property escapes (\p{...}) | Chrome 完全対応 64 | Edge 完全対応 79 | Firefox 未対応 なし | IE 未対応 なし | Opera 完全対応 51 | Safari 完全対応 11.1 | WebView Android 完全対応 64 | Chrome Android 完全対応 64 | Firefox Android 未対応 なし | Opera Android 完全対応 47 | Safari iOS 完全対応 11.3 | Samsung Internet Android 完全対応 9.0 | nodejs
完全対応
10.0.0
|
RegExp.rightContext ($') | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 5.5 | Opera 完全対応 8 | Safari 完全対応 3 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
source | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 4 | Opera 完全対応 5 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
sticky | Chrome 完全対応 49 | Edge 完全対応 13 | Firefox 完全対応 3 | IE 未対応 なし | Opera 完全対応 36 | Safari 完全対応 10 | WebView Android 完全対応 49 | Chrome Android 完全対応 49 | Firefox Android 完全対応 4 | Opera Android 完全対応 36 | Safari iOS 完全対応 10 | Samsung Internet Android 完全対応 5.0 | nodejs 完全対応 あり |
test | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 4 | Opera 完全対応 5 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
toSource | Chrome 未対応 なし | Edge 未対応 なし | Firefox
未対応
1 — 74
| IE 未対応 なし | Opera 未対応 なし | Safari 未対応 なし | WebView Android 未対応 なし | Chrome Android 未対応 なし | Firefox Android 完全対応 4 | Opera Android 未対応 なし | Safari iOS 未対応 なし | Samsung Internet Android 未対応 なし | nodejs 未対応 なし |
toString | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 4 | Opera 完全対応 5 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
unicode | Chrome 完全対応 50 | Edge
完全対応
12
| Firefox 完全対応 46 | IE 未対応 なし | Opera 完全対応 37 | Safari 完全対応 10 | WebView Android 完全対応 50 | Chrome Android 完全対応 50 | Firefox Android 完全対応 46 | Opera Android 完全対応 37 | Safari iOS 完全対応 10 | Samsung Internet Android 完全対応 5.0 | nodejs 完全対応 あり |
@@match | Chrome 完全対応 50 | Edge 完全対応 13 | Firefox 完全対応 49 | IE 未対応 なし | Opera 完全対応 37 | Safari 完全対応 10 | WebView Android 完全対応 50 | Chrome Android 完全対応 50 | Firefox Android 完全対応 49 | Opera Android 完全対応 37 | Safari iOS 完全対応 10 | Samsung Internet Android 完全対応 5.0 | nodejs 完全対応 6.0.0 |
@@matchAll | Chrome 完全対応 73 | Edge 完全対応 79 | Firefox 完全対応 67 | IE 未対応 なし | Opera 完全対応 60 | Safari 未対応 なし | WebView Android 完全対応 73 | Chrome Android 完全対応 73 | Firefox Android 完全対応 67 | Opera Android 完全対応 52 | Safari iOS 未対応 なし | Samsung Internet Android 完全対応 5.0 | nodejs 完全対応 12.0.0 |
@@replace | Chrome 完全対応 50 | Edge 完全対応 79 | Firefox 完全対応 49 | IE 未対応 なし | Opera 完全対応 37 | Safari 完全対応 10 | WebView Android 完全対応 50 | Chrome Android 完全対応 50 | Firefox Android 完全対応 49 | Opera Android 完全対応 37 | Safari iOS 完全対応 10 | Samsung Internet Android 完全対応 5.0 | nodejs 完全対応 6.0.0 |
@@search | Chrome 完全対応 50 | Edge 完全対応 13 | Firefox 完全対応 49 | IE 未対応 なし | Opera 完全対応 37 | Safari 完全対応 10 | WebView Android 完全対応 50 | Chrome Android 完全対応 50 | Firefox Android 完全対応 49 | Opera Android 完全対応 37 | Safari iOS 完全対応 10 | Samsung Internet Android 完全対応 5.0 | nodejs 完全対応 6.0.0 |
@@species | Chrome 完全対応 50 | Edge 完全対応 13 | Firefox 完全対応 49 | IE 未対応 なし | Opera 完全対応 37 | Safari 完全対応 10 | WebView Android 完全対応 50 | Chrome Android 完全対応 50 | Firefox Android 完全対応 49 | Opera Android 完全対応 37 | Safari iOS 完全対応 10 | Samsung Internet Android 完全対応 5.0 | nodejs
完全対応
6.5.0
|
@@split | Chrome 完全対応 50 | Edge 完全対応 79 | Firefox 完全対応 49 | IE 未対応 なし | Opera 完全対応 37 | Safari 完全対応 10 | WebView Android 完全対応 50 | Chrome Android 完全対応 50 | Firefox Android 完全対応 49 | Opera Android 完全対応 37 | Safari iOS 完全対応 10 | Samsung Internet Android 完全対応 5.0 | nodejs 完全対応 6.0.0 |
凡例
- 完全対応
- 完全対応
- 未対応
- 未対応
- 非標準。ブラウザー間の互換性が低い可能性があります。
- 非標準。ブラウザー間の互換性が低い可能性があります。
- 非推奨。新しいウェブサイトでは使用しないでください。
- 非推奨。新しいウェブサイトでは使用しないでください。
- 実装ノートを参照してください。
- 実装ノートを参照してください。
- ユーザーが明示的にこの機能を有効にしなければなりません。
- ユーザーが明示的にこの機能を有効にしなければなりません。
Firefox固有の注意事項
Firefox 34 より、量指定子を伴うキャプチャグループが動作を妨げている場合に、キャプチャグループにマッチしたテキストが空文字列ではなく undefined になります:
// Firefox 33 以前
'x'.replace(/x(.)?/g, function(m, group) {
console.log("'group:" + group + "'");
}); // 'group:'
// Firefox 34 以降
'x'.replace(/x(.)?/g, function(m, group) {
console.log("'group:" + group + "'");
}); // 'group:undefined'
ウェブの互換性のため RegExp.$N は引き続き、undefined ではなく空文字列を返します (バグ 1053944)。