Javascript正则表达式:用f($ 1)替换$ 1

时间:2010-11-14 23:33:22

标签: javascript regex string idioms

我有一个正则表达式,比如/url.com\/([A-Za-z]+)\.html/,我想用new string $1: f($1)替换它,也就是说,用一个带有两个插值的常量字符串,捕获的字符串和捕获的函数字符串。

在JavaScript中执行此操作的最佳方法是什么? “最佳”在这里意味着(1)最不容易出错,(2)在空间和速度方面最有效,(3)大多数惯用于JavaScript的特殊组合,特别强调#3。

3 个答案:

答案 0 :(得分:7)

replace方法可以take a function as the replacement parameter

例如:

str.replace(/regex/, function(match, group1, group2, index, original) { 
    return "new string " + group1 + ": " + f(group1);
});

答案 1 :(得分:5)

使用String.replace时,您可以supply a callback function作为替换参数而不是字符串,并创建您自己的非常自定义的返回值。

'foo'.replace(/bar/, function (str, p1, p2) {
    return /* some custom string */;
});

答案 2 :(得分:4)

.replace()接受替换函数,如下所示:

var newStr = string.replace(/url.com\/([A-Za-z]+)\.html/, function(all, match) {
  return match + " something";
});

您可以根据需要转换结果,只需返回您希望匹配在该回调中的任何内容。 You can test it out here