RegExp コンストラクタは、パターンに従ったテキストにマッチする正規表現オブジェクトを生成します。

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

構文

リテラル記法およびコンストラクタ記法を使用できます:

/pattern/flags
new RegExp(pattern[, flags])
RegExp(pattern[, flags])

引数

pattern
正規表現のテキスト、または ES5 以降では、その他の RegExp オブジェクト(またはリテラル)(後者は 2 つの RegExp コンストラクターのみ)です。パターンには特殊文字を含めることができるため、文字列リテラルよりも広い範囲の値にマッチすることができます。
flags

flags が指定されると、フラグが追加されるか、パターン用のオブジェクトが供給された場合は flags の値は他のオブジェクトのフラグを置き換えます(そして lastIndex は 0 にリセットされます) (ES2015以降)。flags が指定されず正規表現オブジェクトが供給されない場合、オブジェクトのフラグ(と lastIndex )はコピーされます。この値は次の値を任意の組み合わせで含んだ文字列で指定できます。:

g
グローバルなマッチ。最初のマッチの後に止まることなくすべてのマッチを探す。
i
大文字・小文字の無視。 u フラグが有効の場合、use Unicode case folding
m
複数行に渡るマッチ。先頭および終端を示す文字 (^ や $) が、複数の行で機能します(すなわち、入力文字列全体の先頭および終端だけでなく各々の行 (\n や \r で区切られる) の先頭および末尾にマッチします)。
s
ドットオール。. は改行文字にマッチします。
u
Unicode。パターンを Unicode コードポイントの羅列として扱います。
y
先頭固定 (sticky)。対象文字列中の正規表現の 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.length
RegExp.length の値は 2 です。
get RegExp[@@species]
派生オブジェクトを生成するために使用するコンストラクタ関数です。
RegExp.lastIndex
次のマッチングを開始する位置です。

メソッド

グローバル RegExp オブジェクトは、自分自身のメソッドを持っていませんが、プロトタイプチェーンを通していくつかのメソッドを継承しています。

RegExp プロトタイプオブジェクトとインスタンス

プロパティ

非推奨の RegExp プロパティも参照してください。

RegExp プロパティのいくつかは(Perl ライクな)長い名前と短い名前の両方を持っていることに注意してください。【訳注: それらは 1.5 以前のバージョンでの実装であり、非推奨の機能です。】どちらの名前でも常に同じ値を参照します。Perl は JavaScript の正規表現のモデルとなっているプログラミング言語です。

RegExp.prototype.constructor
オブジェクトのプロトタイプを生成する関数を指定します。
RegExp.prototype.flags
RegExp オブジェクトのフラグから成る文字列です。
RegExp.prototype.dotAll
. が改行文字にマッチするかどうか。
RegExp.prototype.global
対象文字列で可能なすべてのマッチに対して正規表現をテストするか、それとも、最初のマッチに対してのみテストするどうかのフラグです。
RegExp.prototype.ignoreCase
文字列でのマッチを適用する際に、大文字と小文字の違いを無視するかどうかのフラグです。
RegExp.prototype.multiline
複数行に渡って文字列を検索するかどうかのフラグです。
RegExp.prototype.source
パターンのテキストです。
RegExp.prototype.sticky
検索が先頭固定 (sticky)かどうかのフラグです。
RegExp.prototype.unicode
Unicode 機能が有効かどうかのフラグです。

メソッド

RegExp.prototype.compile()
(Re-)compiles a regular expression during execution of a script.
RegExp.prototype.exec()
その文字列のパラメータでのマッチのための検索を実行します。
RegExp.prototype.test()
その文字列のパラメータでのマッチのためのテストをします。
RegExp.prototype[@@match]()
与えられた文字列とのマッチを行い、マッチ結果を返します。
RegExp.prototype[@@matchAll]()
Returns all matches of the regular expression against a string.
RegExp.prototype[@@replace]()
与えられた文字列のマッチを新しい部分文字列で置き換えます。
RegExp.prototype[@@search]()
与えられた文字列でマッチを検索し、文字列で見つかったパターンのインデックスを返します。
RegExp.prototype[@@split]()
文字列を部分文字列に分割し、指定された文字列を配列に分割します。
RegExp.prototype.toSource()
特定のオブジェクトを表すオブジェクトリテラルを返します。この値は新しいオブジェクトを生成するために使うことができます。Object.prototype.toSource() メソッドを上書きします。
RegExp.prototype.toString()
特定のオブジェクトを表す文字列を返します。Object.prototype.toString() メソッドを上書きします。

データフォーマットを変更するための正規表現の使用

以下のスクリプトは、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 コードブロック (範囲) を知ることができる外部サイトもあります: Regexp-unicode-block 【訳注: 必要な言語をチェックすると文字クラスを組み立ててくれる便利なサイトです。】

URL からサブドメイン名を抽出する

var url = 'http://xxx.domain.com';
console.log(/[^.]+/.exec(url)[0].substr(7)); // logs 'xxx'

仕様

仕様書 策定状況 コメント
ECMAScript 3rd Edition (ECMA-262) 標準 最初期の定義。JavaScript 1.1 で実装。
ECMAScript 5.1 (ECMA-262)
RegExp の定義
標準  
ECMAScript 2015 (6th Edition, ECMA-262)
RegExp の定義
標準 第 1 引数が RegExp で第 2 引数も指定したとき、RegExp で例外が発生しないようになりました。Unicode および sticky フラグを導入。
ECMAScript Latest Draft (ECMA-262)
RegExp の定義
ドラフト  

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
RegExpChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
compile
非推奨
Chrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
dotAllChrome 完全対応 62Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 49Safari 完全対応 12WebView Android 完全対応 62Chrome Android 完全対応 62Firefox Android 未対応 なしOpera Android 完全対応 46Safari iOS 完全対応 12Samsung Internet Android 完全対応 ありnodejs 完全対応 8.10.0
完全対応 8.10.0
完全対応 8.3.0
無効
無効 From version 8.3.0: this feature is behind the --harmony runtime flag.
execChrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
flagsChrome 完全対応 ありEdge 完全対応 あり
無効
完全対応 あり
無効
無効 This feature is behind the Experimental JavaScript Features preference.
Firefox 完全対応 37IE 未対応 なしOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 37Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 6.0.0
globalChrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
ignoreCaseChrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
RegExp.input ($_)
非標準
Chrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
lastIndexChrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
RegExp.lastMatch ($&)
非標準
Chrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
RegExp.lastParen ($+)
非標準
Chrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
RegExp.leftContext ($`)
非標準
Chrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
lookbehind assertions ((?<= ) and (?<! ))Chrome 完全対応 62Edge 未対応 なしFirefox 未対応 なし
補足
未対応 なし
補足
補足 See bug 1225665.
IE 未対応 なしOpera 完全対応 49Safari 未対応 なしWebView Android 完全対応 62Chrome Android 完全対応 62Firefox Android 未対応 なし
補足
未対応 なし
補足
補足 See bug 1225665.
Opera Android 完全対応 46Safari iOS 未対応 なしSamsung Internet Android 完全対応 ありnodejs 完全対応 8.10.0
multilineChrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
RegExp.$1-$9
非標準
Chrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
Unicode property escapes (\p{...})Chrome 完全対応 64Edge ? Firefox 未対応 なしIE ? Opera 完全対応 51Safari ? WebView Android 完全対応 64Chrome Android 完全対応 64Firefox Android 未対応 なしOpera Android 完全対応 47Safari iOS ? Samsung Internet Android 完全対応 ありnodejs 完全対応 10.0.0
完全対応 10.0.0
完全対応 8.3.0
無効
無効 From version 8.3.0: this feature is behind the --harmony runtime flag.
prototypeChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
RegExp.rightContext ($')
非標準
Chrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
sourceChrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
stickyChrome 完全対応 49Edge 完全対応 13Firefox 完全対応 3IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 4Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 あり
testChrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
toSource
非標準
Chrome 未対応 なしEdge 未対応 なしFirefox 完全対応 1IE 未対応 なしOpera 未対応 なしSafari 未対応 なしWebView Android 未対応 なしChrome Android 未対応 なしFirefox Android 完全対応 4Opera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なしnodejs 未対応 なし
toStringChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
unicodeChrome 完全対応 50Edge 完全対応 12
補足
完全対応 12
補足
補足 Case folding is implemented in version 13
Firefox 完全対応 46IE 未対応 なしOpera 完全対応 37Safari 完全対応 10WebView Android 完全対応 ありChrome Android 完全対応 50Firefox Android 完全対応 46Opera Android 完全対応 37Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 あり
@@matchChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 49IE 未対応 なしOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 49Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 6.0.0
@@matchAllChrome 完全対応 73Edge 未対応 なしFirefox 完全対応 67IE 未対応 なしOpera 完全対応 60Safari 未対応 なしWebView Android 完全対応 73Chrome Android 完全対応 73Firefox Android 完全対応 67Opera Android 完全対応 ありSafari iOS 未対応 なしSamsung Internet Android 完全対応 ありnodejs 完全対応 12.0.0
@@replaceChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 49IE 未対応 なしOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 49Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 6.0.0
@@searchChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 49IE 未対応 なしOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 49Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 6.0.0
@@speciesChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 49IE 未対応 なしOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 49Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 6.5.0
完全対応 6.5.0
完全対応 6.0.0
無効
無効 From version 6.0.0: this feature is behind the --harmony runtime flag.
@@splitChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 49IE 未対応 なしOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 49Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 あり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'

web 互換性のため RegExp.$N は引き続き、undefined ではなく空文字列を返します (バグ 1053944)。

関連情報

ドキュメントのタグと貢献者

最終更新者: segayuu,