0

考虑下面的代码:

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

这将返回:

axiycxIyd

现在,如果我想让它返回这个怎么办:

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");

我还能尝试什么?

4

2 回答 2

0

对于插入$你需要$$的,在你的情况下$&是特殊的替换模式,如果你先逃跑$$$会起作用。

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

您可以指定一个函数作为第二个参数。在这种情况下,将在执行匹配后调用该函数。函数的结果(返回值)将用作替换字符串。

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>');

于 2016-03-11T18:21:44.600 回答
-1

如果你想返回“ax$&ycx$&yd”,这应该有效:

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

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

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

这里

于 2016-03-11T18:44:47.210 回答