exec() メソッドは、指定された文字列内で一致するものの検索を実行します。結果の配列、または null を返します。

単に見つかったか見つからなかったかを知るために一致を実行するのであれば、 RegExp.prototype.test() メソッド又は String.prototype.search() メソッドを使用してください。

構文

regexObj.exec(str)

引数

str
正規表現に一致するかどうかの対象となる文字列。

返値

一致に成功した場合、 exec メソッドは、配列を返し、正規表現オブジェクトのプロパティを更新します。返値の配列には最初の項目として一致した文字列が入り、一致した文字列の中に含まれるそれぞれの括弧が1つずつ項目として入ります。

一致に失敗した場合は、exec メソッドは null を返します。

説明

次の例を考えてください。

// "quick brown" の後に "jumps" が来るものを、その間の文字を無視して一致させます。
// "brown" と "jumps" を取得します。
// 大文字と小文字は区別しません。
var re = /quick\s(brown).+?(jumps)/ig;
var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');

このスクリプトの結果は以下の表の通りです。

オブジェクト プロパティ / 添字 説明
result [0] 文字が一致した部分の文字列全体 Quick Brown Fox Jumps
[1], ...[n ] もしあれば、括弧に囲まれた部分文字列が一致したものです。括弧に囲まれた部分文字列の数に制限はありません。 [1] = Brown
[2] = Jumps
index 0から始める一致した文字列の位置。 4
input 元の文字列。 The Quick Brown Fox Jumps Over The Lazy Dog
re lastIndex 次回の検索を始める位置。 "g" がない場合は 0 のまま。 25
ignoreCase 大文字小文字を区別しない、 "i" フラグが指定されているかどうか。 true
global グローバルマッチのための、 "g" フラグが指定されているかどうか。 true
multiline 複数行に渡って文字列を検索する、 "m" フラグが指定されているかどうか。 false
source パターンの文字列。 quick\s(brown).+?(jumps)

成功する一致の検索

正規表現で "g" フラグを使用する場合、同じ文字列で成功する一致を見つけるために exec() メソッドを複数回使うことができます。その際、検索は正規表現オブジェクトの lastIndex プロパティで指定された位置の str の部分文字列から始まります (test()lastIndex プロパティの位置から始めます)。例えば、次のスクリプトで考えてみてください。

var myRe = /ab*/g;
var str = 'abbcdefabh';
var myArray;
while ((myArray = myRe.exec(str)) !== null) {
 var msg = myArray[0] + ' を見つけました。';
  msg += '次の検索は ' + myRe.lastIndex + ' からです。';
  console.log(msg);
}

このスクリプトは以下のテキストを表示します。

abb を見つけました。次の検索は 3 からです。
ab を見つけました。次の検索は 9 からです。

メモ: 正規表現リテラル (又は RegExp コンストラクター) を while の条件の中に配置しないでください。 lastIndex プロパティが繰り返し毎にリセットされるので、無限ループになります。また、グローバルフラグ ("g") が設定されていることを確認してください。これも無限ループを引き起こします。

RegExp リテラルでの exec の使用

RegExp オブジェクトを作成せずに exec() を使用することもできます。

var matches = /(hello \S+)/.exec('This is a hello world!');
console.log(matches[1]);

これで 'hello world!' を含んだメッセージをログ出力します。

仕様策定状況

仕様書 策定状況 コメント
ECMAScript 3rd Edition (ECMA-262) 標準 初回定義。 JavaScript 1.2 で実装。
ECMAScript 5.1 (ECMA-262)
RegExp.exec の定義
標準
ECMAScript 2015 (6th Edition, ECMA-262)
RegExp.exec の定義
標準
ECMAScript Latest Draft (ECMA-262)
RegExp.exec の定義
ドラフト

ブラウザーの対応

機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本対応 あり あり1 あり あり あり
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
基本対応 あり あり あり4 あり あり あり

関連項目

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

 このページの貢献者: mfuji09, teoli, ethertank, dextra, Potappo, Mgjbot
 最終更新者: mfuji09,