JavaScript - 字符串正则表达式反向引用

qua*_*ano 90 javascript regex backreference

你可以在JavaScript中反向引用这样的:

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

这将(非常愚蠢)用"test"替换"$ test".但想象一下,我想将结果字符串$ 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"));
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 112

像这样:

str.replace(regex, function(match, $1, $2, offset, original) { return someFunc($2); })
Run Code Online (Sandbox Code Playgroud)

  • 凉.澄清:"$ 1"和"$ 2"是用户选择的参数名称(选择模仿反向引用符号); - 变化! - 这些参数的数量对应于正则表达式中的捕获组的数量. (11认同)
  • https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace (8认同)

Sea*_*ean 33

将函数作为第二个参数传递给replace:

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

function myReplace(str, group1, group2) {
    return "+" + group2 + "+";
}
Run Code Online (Sandbox Code Playgroud)

mozilla.org称,自Javascript 1.3以来,这种功能已经存在.