我有一个功能:
function process(str) {
if (str == "Mary") {
return "Sally";
} else {
return str;
}
}
我有一些文字:
John Smith
Mary Smith
Peter Smith
Mary Davis
我希望它成为:
John Smith
Sally Smith
Peter Smith
Sally Davis
但这一切都不起作用:
text = text.replace(/([a-zA-Z]+)\s([a-zA-Z]+)([\n]{0,1})/g,process(RegExp.$1) + " " + process(RegExp.$2)+"\$3");
//RegExp.$n is undefined
或
text = text.replace(/([a-zA-Z]+)\s([a-zA-Z]+)([\n]{0,1})/g,process('\$1') + " " + process('\$2')+"\$3");
//I got this exact string '$1' in process()
那么如何重用匹配值并将其传递给另一个函数呢?
答案 0 :(得分:1)
String.prototype.replace可以将函数作为第二个参数。此函数将正则表达式的匹配作为第一个参数。所以你只需要像这样调用replace:
EEE7 T2
示例:https://jsfiddle.net/71k6x3gd/
我还改变了正则表达式以匹配所有单词,因为姓氏从来都不是" Mary",它仍然按预期工作。如果要保留正则表达式,则需要更改函数以使用带括号的子匹配。在替换函数中,这些是匹配后的参数。像这样:
var result = str.replace(/([a-zA-Z]+)/g, process);