.exec()

exec()メソッドは、指定した文字列内のマッチを検索するために実行されます。 結果の配列、またはnullが返ります。

もし、単にマッチするものがあるか無いかを検証したいだけなのであれば、 RegExp.test()メソッド、 またはString.search()メソッドを使用する事をお勧めします。

文法

regexObj.exec(str)
引数 説明
str

型:string

正規表現にマッチさせる対象の文字列を指定します。

戻り値 説明
 

型:Arraynull

もしマッチに成功すれば、execメソッドは配列を返し、正規表現オブジェクトのプロパティを更新します。 返された配列は、1つ目の要素にマッチしたテキストを持ち、 それ以降の各要素は、括弧指定にそれぞれマッチしたテキストが含まれます。

もしマッチするものが無ければ、execメソッドはnullを返します。

下記のスクリプトと表を例に、具体的に説明します。

//・1文字の"d"に続く1つ以上の"b"と、更にそれに続く1文字の"d"にマッチ
//・マッチした1つまたは複数の"b"とそれに続く"d"を記憶
//・大文字小文字を無視
var re = /d(b+)(d)/ig;
var result = re.exec("cdbBdbsbz");

下記のテーブルは、このスクリプトの結果になります。

オブジェクト プロパティ
インデックス
説明
result [0] 最後にマッチした文字です。 dbBd
[1]…[n] マッチした区切られた文字列部分(括弧指定で記憶された)が入ります。 文字列を囲む括弧の数に制限はありません。 [1] = bB
[2] = d
index 文字列中のマッチした0始まりのインデックスです。 1
input 元の文字列です。 cdbBdbsbz
re lastIndex 次のマッチを開始するインデックスの場所です。 5
ignoreCase 大文字小文字を無視する"i"フラグが使用されていたかを示します。 true
global グローバル(全体)マッチにする"g"フラグが使用されていたかを示します。 true
multiline 複数行に渡って文字列を検索する"m"フラグが使用されていたかを示します。 false
source 使用された正規表現パターンのテキストです。 d(b+)(d)

注意事項

例:連続したマッチを見つける

もし、正規表現で"g"フラグを使用したのであれば、 同じ文字列内の連続一致を検出するために、execメソッドを複数回使用することができます。 これを行うと検索は、正規表現のlastIndexによって指定されたstrの部分文字列から始まります。 (test()lastIndexプロパティを前進させます。) 例えば、下記のスクリプトがあるとします。

var myRe = /ab*/g;
var str = "abbcdefabh";
var myArray;
while ((myArray = myRe.exec(str)) !== null)
{
  var msg = "Found " + myArray[0] + ".  ";
  msg += "Next match starts at " + myRe.lastIndex;
  console.log(msg);
}

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

Found abb. Next match starts at 3
Found ab. Next match starts at 9

注意: whileの条件に正規表現リテラル(または正規表現コンストラクタ)を置かないでください。 各反復処理時にlastIndexプロパティがリセットされる傾向のあるマッチがあると、無限ループになってしまいます。

例:RegExpリテラルでのexec()の使用

RegExpオブジェクトを作成しないで、exec()を使用することも可能です。

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

これは、'hello world!'のアラートダイアログを表示します。

仕様

ブラウザ互換性

デスクトップ
機能 Chrome Firefox
(Gecko)
IE Opera Safari
基本
モバイル
機能 Android Chrome for
Android
Firefox
Mobile
IE
Mobile
Opera
Mobile
Safari
Mobile
基本

関連項目

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。