str.replace(..., ...)
2番目の引数の関数が渡されるのを見てきました。関数に何が渡されますか?こんなふうになります:
"string_test".replace(/(.*)_(.*)/, function(a, b) { return a + b; } )
一致したグループを関数に渡すにはどうすればよいですか?何でa
ありb
、この場合は何ですか?私は得ていundefined
ます。
str.replace(..., ...)
2番目の引数の関数が渡されるのを見てきました。関数に何が渡されますか?こんなふうになります:
"string_test".replace(/(.*)_(.*)/, function(a, b) { return a + b; } )
一致したグループを関数に渡すにはどうすればよいですか?何でa
ありb
、この場合は何ですか?私は得ていundefined
ます。
最初の引数は一致全体であり、残りは一致したグループを表します。基本的には、から返された配列のようなもの.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()
メソッドからも得るものです。
MDN Docs の説明をコピーしたくありません: Specifying a function as a parameter