我已经看到str.replace(..., ...)
为它的第二个参数传递了一个函数。传递给函数的是什么?它是这样的:
"string_test".replace(/(.*)_(.*)/, function(a, b) { return a + b; } )
你如何让它将匹配的组传递给函数?什么是a
,b
在这种情况下,如果有的话?我一直在得到undefined
。
我已经看到str.replace(..., ...)
为它的第二个参数传递了一个函数。传递给函数的是什么?它是这样的:
"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 文档及其解释:将函数指定为参数