概要
特定の文字列でのマッチのための検索を実行します。結果の配列、あるいは、null
が返ります。
構文
var result1 = regexp.exec(str);
引数
regexp
- 正規表現の名前。変数名かリテラル。
str
- 正規表現にマッチするかどうかの対象となる文字列。
説明
マッチが成功した場合、 exec
メソッドは、配列を返し、正規表現オブジェクトのプロパティを更新します。 マッチが失敗した場合は、exec
メソッドは null
を返します。
単に、マッチが真か偽かを調べたい場合は、test
メソッド か、String の search
メソッドを使ってください。
次の例を考えてください。
// 1 つの d 、それに続く、1 つ以上の b 、それに続く、1 つの d にマッチします。 // b のマッチとそれに続く d のマッチをそれぞれ覚えておきます。 // 大文字、小文字を無視します。 var myRe = /d(b+)(d)/ig; var myArray = myRe.exec("cdbBdbsbz");
このスクリプトの結果は以下の表の通りです。
オブジェクト | プロパティ / 配列番号 | 説明 | 例 |
myArray |
|
myArray の内容 |
["dbBd", "bB", "d"] |
index |
文字列のマッチの 0 ベースの位置【訳注: 0 は、 /^/ でマッチする、文字列の開始位置】。 | 1 |
|
input |
元の文字列。 | cdbBdbsbz |
|
[0] |
最後にマッチした文字 | dbBd |
|
[1], ...[
n
] |
括弧で囲まれた部分文字列のマッチ。括弧で囲まれた部分文字列の数に制限はありません。 | [1] = bB |
|
myRe |
lastIndex |
次のマッチが始まる位置。 | 5 |
ignoreCase |
大文字小文字を区別しない、"i " フラグが指定されているかどうか。 |
true |
|
global |
グローバルマッチのための、"g " フラグが指定されているかどうか。 |
true |
|
multiline |
複数行に渡って文字列を検索する、"m " フラグが指定されているかどうか。 |
false |
|
source |
パターンのテキスト。 | d(b+)(d) |
正規表現で "g
" フラグを使用する場合、同じ文字列で成功するマッチを見つけるために exec
メソッドを複数回使うことができます。そのときの検索は、正規表現の lastIndex
プロパティで指定された、str
の部分文字列から開始されます。例えば、このスクリプトで考えてみてください。
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 からです。
例
例: exec
の使用
以下の例では、ユーザは名前を入力し、スクリプトが入力に対してのマッチを実行します。その処理は、配列によって、他の名前がユーザの名前にマッチするかわかるまで、繰り返されます。
このスクリプトは、パーティデータベースから集められたであろう、登録されたパーティの出席者のファーストネームが配列 A にあらかじめ読み込まれていることを仮定しています。
var A = ["Frank", "Emily", "Jane", "Harry", "Nick", "Beth", "Rick", "Terrence", "Carol", "Ann", "Terry", "Frank", "Alice", "Rick", "Bill", "Tom", "Fiona", "Jane", "William", "Joan", "Beth"]; function lookup(input) { var firstName = /\w+/i.exec(input.value); if (!firstName){ console.log (input.value + " isn't a name!"); return; } var count = 0; for (var i = 0; i < A.length; i++){ if (firstName[0].toLowerCase() == A[i].toLowerCase()) count++; } var midstring = count == 1 ? " other has " : " others have "; console.log("Thanks, " + count + midstring + "the same name!"); }