Javascript Regex:重用匹配

时间:2015-10-17 10:28:47

标签: javascript regex

我有一个功能:

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()

那么如何重用匹配值并将其传递给另一个函数呢?

1 个答案:

答案 0 :(得分:1)

String.prototype.replace可以将函数作为第二个参数。此函数将正则表达式的匹配作为第一个参数。所以你只需要像这样调用replace:

EEE7 T2

示例:https://jsfiddle.net/71k6x3gd/

我还改变了正则表达式以匹配所有单词,因为姓氏从来都不是" Mary",它仍然按预期工作。如果要保留正则表达式,则需要更改函数以使用带括号的子匹配。在替换函数中,这些是匹配后的参数。像这样:

var result = str.replace(/([a-zA-Z]+)/g, process);

示例:https://jsfiddle.net/71k6x3gd/1/