- ベストアンサー
ECMAScript:RegExp.exec()メソッドについて
- 正規表現(gフラグつき)とマッチングを行うと、マッチしたAが全て配列として帰ってくる
- regExp.exec()メソッドを使用して正規表現(gフラグつき)とマッチングを行うと、マッチしたAが1つしか帰ってこない
- なぜRegExp.exec()メソッドはマッチした文字が1件しか帰ってこないのか
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> どなたか、JavaScriptやECMAScriptのロジカル的 > な部分で詳しい方がいらっしゃいましたら、 全然詳しくないですが、 下記MSDN(JScript.NET言語リファレンス)の説明がわかりやすいです。 execメソッドの説明: http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jscript7/html/jsmthexec.asp matchメソッドの説明: http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jscript7/html/jsmthmatch.asp また、質問の中で紹介されたサイトの ・15.5.4.10 String.prototype.match (regexp) ・15.10.6.2 RegExp.prototype.exec (string) をよ~く読めば、どうやら、 上記MSDNの説明と一致する、 つまり、『仕様通りの動作をしている』みたいです... こういう仕様書に慣れてないと理解しづらいですよね。 ↓のスクリプトで、オプションを変えて 動作を確認してみてください。 var s; var str = "cdbBdbsbdbdz"; // dbBd,dbd var re = new RegExp("d(b+)(d)","ig"); //<=>"i" var arr = str.match(re); document.write(arr + "<BR><BR>"); var re = new RegExp("d(b+)(d)","ig"); //<=>"i" // dbBd,bB,d var arr = re.exec(str); s = arr.index + "-" + arr.lastIndex + ":" + arr + "<BR>"; s += RegExp.$1 + "," + RegExp.$2 + ";" + RegExp.$3 + "<BR>"; document.write(s + "<BR>"); // "ig":dbd,b,d / "i":dbBd,bB,d arr = re.exec(str); s = arr.index + "-" + arr.lastIndex + ":" + arr + "<BR>"; s += RegExp.$1 + "," + RegExp.$2 + ";" + RegExp.$3 + "<BR>"; document.write(s + "<BR>"); // "ig":null / "i":dbBd,bB,d arr = re.exec(str); document.write(arr);
お礼
ご回答、ありがとうございます。 連絡が遅くなって申し訳ありません。。。 上記のスクリプトで動作確認いたしました。 String.match()メソッドでは配列の中にマッチングした全ての文字列を格納して返すけど、 Reg.exec()メソッドでは配列を返さないで、マッチングした文字列1件分だけが返ることが分かりました。 また、Reg.exec()メソッドで、マッチングした文字列を全て取り出したい場合は、Reg.lastIndexプロパティを使って繰り返しReg.exec()メソッドを実行すればいいわけですね! 確かに、この手の仕様書を読みなれていませんでした。。。 とにかく、解決いたしました。 ありがとうございました!