如何逃避JavaScript RegEx替换字符?

时间:2016-03-11 17:50:49

标签: javascript regex character-replacement

请考虑以下代码:

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

我还能尝试什么?

2 个答案:

答案 0 :(得分: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>');它将起作用

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

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

来自MDN

  

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

<html>
   <head>
   <title>function</title>
   <script type="text/javascript">
   function sum(a,b) {
       var c=min(a,b);
       for (c;c<b;c++) {
           var d=c+(c+1);
           return d;
       }
       document.getElementById("para").innerHTML=sum();
   }

</script>

</head>

<body>

<form onsubmit="sum()">

<p>Number 01</p><input type="text" name="t1">

<p>Number 02</p><input type="text" name="t2">

<input type="submit" value="sb">

</form>

<p id="para"></p>

</body>
</html>

答案 1 :(得分:-1)

如果你想返回&#34; ax $&amp; ycx $&amp; yd&#34;,这应该有效:

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

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

正则表达式的第二部分被视为&#34;正常&#34;字符串,其中&#34; $&#34;没有特殊意义。

来自here