Core JavaScript 1.5 Reference:Global Objects:RegExp:exec
出典: MDC
目次 |
[編集] 概要
特定の文字列でのマッチのための検索を実行します。結果の配列、あるいは、null が返ります。
| RegExp のメソッド | |
| 実装されたバージョン: | JavaScript 1.2, NES3.0 |
| ECMA バージョン: | ECMA-262, Edition 3 (最初の構文のみ) |
[編集] 構文
var result1 = regexp.exec(str); var result2 = regexp(str); // Mozilla 拡張
[編集] 引数
-
regexp - 正規表現の名前。変数名かリテラル。
-
str - 正規表現にマッチするかどうかの対象となる文字列。
[編集] 説明
構文の説明で示されているように、正規表現の exec メソッドは、直接的 (regexp.exec(str)) 、もしくは、間接的 (regexp(str)) に呼ばれます。
単に、マッチが真か偽かを調べたい場合は、test メソッド か、String.search メソッドを使ってください。
マッチが成功した場合、 exec メソッドは、配列を返し、正規表現オブジェクトのプロパティを更新します。 マッチが失敗した場合は、exec メソッドは null を返します。
以下の例を考えてください。:
// 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 + " からです。"
print(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)
{
print (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 ";
print("Thanks, " + count + midstring + "the same name!")
}