JavaScript: exec() マッチした文字列の詳細を取得する
正規表現を使って、マッチした文字列の詳細を取得したい場合は RegExp オブジェクトの exec() メソッドを使います。
exec() メソッドは、「g」オプション(グローバルオプション)を指定していても、 一度に1つのマッチング結果しか返しません。その代わり、サブマッチ文字列等、 詳細なマッチング結果を取得できます。
マッチする文字列がない(なくなった)場合の戻り値は null です。 すべてのマッチする文字列を取得する場合は、exec() メソッドが null を返すまで ループを繰り返します。このループのロジックはサンプルコードで確認してください。
関連記事: match() と exec() の違い
書式
正規表現.exec(文字列)
サンプルコード
下のサンプルコードは郵便番号を取得するプログラムです。 マッチした文字列の他に、サブマッチ文字列も表示されていることを確認してください。
RegExp オブジェクトの「lastIndex」プロパティでは、マッチした文字列の直後の文字位置を取得できます。
// 文字列
var str = "〒 135-0064\n〒 105-7444";
// 正規表現
var ex = /(\d{3})-(\d{4})/g;
var arr = [];
while((arr = ex.exec(str)) != null){
console.log(arr);
console.log('マッチ文字列:', arr[0]);
console.log('lastIndex:', ex.lastIndex);
}
// 実行結果
Array [ "135-0064", "135", "0064" ]
マッチ文字列: 135-0064
lastIndex: 10
Array [ "105-7444", "105", "7444" ]
マッチ文字列: 105-7444
lastIndex: 21