• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ECMAScript:RegExp.exec()メソッドについて)

ECMAScript:RegExp.exec()メソッドについて

このQ&Aのポイント
  • 正規表現(gフラグつき)とマッチングを行うと、マッチしたAが全て配列として帰ってくる
  • regExp.exec()メソッドを使用して正規表現(gフラグつき)とマッチングを行うと、マッチしたAが1つしか帰ってこない
  • なぜRegExp.exec()メソッドはマッチした文字が1件しか帰ってこないのか

質問者が選んだベストアンサー

  • ベストアンサー
  • pureh
  • ベストアンサー率69% (36/52)
回答No.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);

Garnet24
質問者

お礼

ご回答、ありがとうございます。 連絡が遅くなって申し訳ありません。。。 上記のスクリプトで動作確認いたしました。 String.match()メソッドでは配列の中にマッチングした全ての文字列を格納して返すけど、 Reg.exec()メソッドでは配列を返さないで、マッチングした文字列1件分だけが返ることが分かりました。 また、Reg.exec()メソッドで、マッチングした文字列を全て取り出したい場合は、Reg.lastIndexプロパティを使って繰り返しReg.exec()メソッドを実行すればいいわけですね! 確かに、この手の仕様書を読みなれていませんでした。。。 とにかく、解決いたしました。 ありがとうございました!