0

str.replace(..., ...)2番目の引数の関数が渡されるのを見てきました。関数に何が渡されますか?こんなふうになります:

"string_test".replace(/(.*)_(.*)/, function(a, b) { return a + b; } )

一致したグループを関数に渡すにはどうすればよいですか?何でaありb、この場合は何ですか?私は得ていundefinedます。

4

2 に答える 2

0

最初の引数は一致全体であり、残りは一致したグループを表します。基本的には、から返された配列のようなもの.match()です。

正規表現に「g」修飾子がある場合は、明らかに関数が何度も呼び出されます。

例:

var s = "hello out there";

s.replace(/(\w*) *out (\w*)/, function(complete, first, second) {
  alert(complete + " - " + first + " - " + second);
  // hello out there - hello - there
});

編集—関数で、一致したグループを配列として使用する場合は、次の操作を実行できます。

s.replace(/(\w*) *out (\w*)/, function(complete, first, second) {
  var matches = [].slice.call(arguments, 0);
  alert(matches[0] + " - " + matches[1] + " - " + matches[2]);
  // hello out there - hello - there
});

もちろん、私が上で書いたように、それはあなたが.match()メソッドからも得るものです。

于 2012-07-12T18:05:10.640 に答える
-1

MDN Docs の説明をコピーしたくありません: Specifying a function as a parameter

于 2012-07-12T18:07:13.087 に答える