如何转义 JavaScript RegEx 替换字符?

How to escape JavaScript RegEx replacement characters?

考虑以下代码:

var my_string = "aicId";
var my_pattern = "i";
var my_regex = new RegExp(my_pattern,"gi");
var my_result = my_string.replace(my_regex,"x$&y");
alert (my_result);

这会 return:

axiycxIyd

现在,如果我想要它 return 这个:

ax$&ycx$&yd

我需要做什么?

我试图像这样逃避他们:

var my_result = my_string.replace(my_regex,"x$\&y");

或者这个:

var my_result = my_string.replace(my_regex,"x\$&y");

或者这个:

var my_result = my_string.replace(my_regex,"x$&y");

或者这个:

var dollar = '$';
var amper = '&';
var my_result = my_string.replace(my_regex,"x" + dollar.charCodeAt(0) + amper.charCodeAt(0) + "y");

我还能尝试什么?

为了插入一个 $ 你需要 $$,在你的情况下 $& 是特殊的替换模式,如果你先将 $ 转义为 $$ 它将工作。

var my_string = "aicId";
var my_pattern = "i";
var my_regex = new RegExp(my_pattern, "gi");
var my_result = my_string.replace(my_regex, "x$$&y");
document.write('<pre>' + JSON.stringify(my_result, 0, 2) + '</pre>');


或者您可以将函数用作第二个参数而不转义任何内容:

来自MDN

You can specify a function as the second parameter. In this case, the function will be invoked after the match has been performed. The function's result (return value) will be used as the replacement string.

var my_string = "aicId";
var my_pattern = "i";
var my_regex = new RegExp(my_pattern, "gi");
var my_result = my_string.replace(my_regex, function() {
    return "x$&y";
});
document.write('<pre>' + JSON.stringify(my_result, 0, 2) + '</pre>');

如果你想 return "ax$&ycx$&yd",这应该有效:

var my_result = my_string.replace(my_regex,"x$$\&y");

因为在正则表达式的第一部分,“$”需要转义,因为它是一个特殊的正则表达式字符,表示字符串的结尾。

正则表达式的第二部分被视为 "normal" 字符串,其中“$”没有特殊含义。

来自 here.