.exec()
exec()
メソッドは、指定した文字列内のマッチを検索するために実行されます。
結果の配列、またはnullが返ります。
もし、単にマッチするものがあるか無いかを検証したいだけなのであれば、 RegExp.test()メソッド、 またはString.search()メソッドを使用する事をお勧めします。
文法
regexObj.exec(str)
引数 | 説明 |
---|---|
str |
型: 正規表現にマッチさせる対象の文字列を指定します。 |
戻り値 | 説明 |
型:
もしマッチに成功すれば、
もしマッチするものが無ければ、 |
例
下記のスクリプトと表を例に、具体的に説明します。
//・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 |
---|---|---|---|---|---|---|
基本 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
関連項目
© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。
- 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
- 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
- MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。