跨浏览器正则表达式库,用于使用函数替换Javascript

时间:2011-02-25 16:01:55

标签: javascript regex cross-browser

是否有用于替换函数作为参数的库

当我调用此函数时

"foo[10]bar[20]baz".replacef(/\[([0-9]*)\]/g, function(a) {
    return '[' + (ParseInt(a)*10) + ']';
});

它应该返回

"foo[20]bar[30]baz";

当我打电话给你时

"foo[10;5]bar[15;5]baz".replacef(/\[([0-9]*);([0-9]*)\]/g, function(a, b) {
    return '_' + (ParseInt(a)+ParseInt(b)) + '_';
});

它应该返回

"foo_15_bar_20_baz"

现有的跨浏览器库是否在JavaScript中具有此类功能或类似功能?

2 个答案:

答案 0 :(得分:5)

这就是“replace()”函数已经运行的方式。如果第二个参数是一个函数,它会传递一个参数列表,这些参数与从RegExp“exec()”函数返回的数组几乎相同。该函数返回它想要匹配区域替换的内容。

被调用函数的第一个参数是整个匹配的字符串。第二个和后续参数是正则表达式中捕获的组(如第二个示例)。但是,你的第二个例子需要一个带有一个参数的函数来保存整个匹配的字符串。

示例:

var s = "hello world".replace(/(\w+)\s*(\w+)/, function(wholeMatch, firstWord, secondWord) {
  return "first: " + firstWord + " second: " + secondWord;
});
alert(s); // "first: hello second: world"

答案 1 :(得分:2)

据我所知,你可以在javascript中轻松做到这样的事情:

"foo[10]bar[20]baz".replace(/\[([0-9]+)\]/g, function() {
  return '[' + (parseInt(arguments[1])*10) + ']';
});

这是afaik跨浏览器(注意parseInt没有前导大写的p),参数包含匹配,索引0是整个事物,1等等是捕获的组。