什么是传递给JavaScript replace()函数?

时间:2012-07-12 18:04:11

标签: javascript regex replace

我看到str.replace(..., ...)传递了第二个参数的函数。什么传递给函数?它是这样的:

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

如何将匹配的组传递给函数?在这种情况下,ab有什么用?我一直在undefined

2 个答案:

答案 0 :(得分: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()方法得到的。

答案 1 :(得分:-1)

我真的不想复制MDN文档及其解释:Specifying a function as a parameter