2010-03-15 71 views
73

您可以在JavaScript中的反向引用这样的:JavaScript的 - 字符串的正则表达式反向引用

var str = "123 $test 123"; 
str = str.replace(/(\$)([a-z]+)/gi, "$2"); 

这将(相当愚蠢的)替换 “$测试” 和 “测试”。但想象一下,我想将$ 2的结果字符串传递给一个函数,该函数返回另一个值。我试过这样做,但没有得到字符串“测试”,我得到“$ 2”。有没有办法做到这一点?

// Instead of getting "$2" passed into somefunc, I want "test" 
// (i.e. the result of the regex) 
str = str.replace(/(\$)([a-z]+)/gi, somefunc("$2")); 

回答

103

像这样:

str.replace(regex, function(match, $1, $2, offset, original) { return someFunc($2); }) 
+0

真棒,我在哪里可以找到更多这方面的信息? – quano 2010-03-15 14:54:20

+7

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace – SLaks 2010-03-15 14:55:52

+10

很酷。澄清:'$ 1'和'$ 2'是用户选择的参数名称(选择模仿反向引用符号); - 变化! - 这些参数的数量对应于正则表达式中捕获组的数量。 – mklement0 2013-05-01 22:48:02

28

传递一个函数作为第二个参数replace

str = str.replace(/(\$)([a-z]+)/gi, myReplace); 

function myReplace(str, group1, group2) { 
    return "+" + group2 + "+"; 
} 

这种能力已自1.3的Javascript据mozilla.org

-1

注:先前的答案缺少一些代码。现在已经修复+示例。


我需要一些更灵活的正则表达式替换为Unicode在我传入的JSON数据进行解码:

var text = "some string with an encoded 's' in it"; 

text.replace(/&#(\d+);/g, function() { 
    return String.fromCharCode(arguments[1]); 
}); 

// "some string with an encoded 's' in it"