JavaScript – string正则expression式反向引用

你可以在JavaScript中反向引用:

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

这(很愚蠢)将“testing”replace“testing”。 但是想象一下,我想将$ 2的结果string传递给一个返回另一个值的函数。 我试过这样做,但没有得到string“testing”,我得到“$ 2”。 有没有办法做到这一点?

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

喜欢这个:

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

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

 str = str.replace(/(\$)([az]+)/gi, myReplace); function myReplace(str, group1, group2) { return "+" + group2 + "+"; } 

根据mozilla.org的说法,这个function从Javascript 1.3开始就有了。

注意:以前的答案缺less一些代码。 现在已经修复+例子。


我需要一些更灵活的正则expression式replace来解码我的传入JSON数据中的Unicode:

 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"