初めて投稿します。
var re = new RegExp("A", "g");
var res = "ABABAB".match(re);
document.writeln(res);
上記のように、文字列に対してString.match()メソッドを使用して正規表現(gフラグつき)とマッチングを行うと結果は
「A,A,A」
とマッチしたAが全て配列として帰ってきますが、
var re = new RegExp("A", "g");
var res = re.exec("ABABAB");
document.writeln(res);
上記のように、文字列に対してregExp.exec()メソッドを使用して正規表現(gフラグつき)とマッチングを行うと結果は
「A」
とマッチしたAが1つしか帰ってきません。
ECMA 262 3rd Editionの仕様では、
(http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/)
RegExp.exec()メソッドも、String.match()メソッドと同様に、regExpのオブジェクトを生成時に"g"フラグを付加して、ある文字列とマッチングすると、マッチするものが1件以上存在する場合、新しい配列にマッチしたもの全てを各要素に格納して値を返す動作を行うと(多分?)書かれているみたいなのですが、RegExp.exec()メソッドは、どのブラウザで操作を実行しようとしても、マッチした文字が1件しか帰ってきません。。。
教えていただきたいのは、
『何故、RegExp.exec()メソッドはマッチした文字が1件しか帰ってこないか?』です。
いろんなサイトを調べてみたのですが、どうしてRegExp.exec()メソッドがこのようなふるまいを起こすか断定できませんでした。。。
どなたか、JavaScriptやECMAScriptのロジカル的な部分で詳しい方がいらっしゃいましたら、
よろしくお願いいたします。m(__)m
お礼
ご回答、ありがとうございます。 連絡が遅くなって申し訳ありません。。。 上記のスクリプトで動作確認いたしました。 String.match()メソッドでは配列の中にマッチングした全ての文字列を格納して返すけど、 Reg.exec()メソッドでは配列を返さないで、マッチングした文字列1件分だけが返ることが分かりました。 また、Reg.exec()メソッドで、マッチングした文字列を全て取り出したい場合は、Reg.lastIndexプロパティを使って繰り返しReg.exec()メソッドを実行すればいいわけですね! 確かに、この手の仕様書を読みなれていませんでした。。。 とにかく、解決いたしました。 ありがとうございました!