我有一个正则表达式,比如/url.com\/([A-Za-z]+)\.html/
,我想用new string $1: f($1)
替换它,也就是说,用一个带有两个插值的常量字符串,捕获的字符串和捕获的函数字符串。
在JavaScript中执行此操作的最佳方法是什么? “最佳”在这里意味着(1)最不容易出错,(2)在空间和速度方面最有效,(3)大多数惯用于JavaScript的特殊组合,特别强调#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