首页 > 解决方案 > JavaScript RegExp:为什么 `\$` 不匹配 `$` 而 `\\$` 匹配?

问题描述

我想替换成{$variable_name}一个字符串,比如“嗨,我的名字是 {$name}”。将更改为“嗨,我的名字是 Sam。”

我认为$将表示为\$,许多 RegExp 测试网站,例如https://www.regextester.com/,都这样做。

遵循我的代码。

var str = "Hi, my name is {$name}.";
var reg = "\{\$name\}";
str = str.replace(new RegExp(reg,"g"), "Sam");
console.log(str); //Hi, my name is {$name}.

然后,我将其更改\$\\$,它起作用了。

var str = "Hi, my name is {$name}.";
var reg = "\{\\$name\}";
str = str.replace(new RegExp(reg,"g"), "Sam");
console.log(str); //Hi, my name is Sam.

但我不明白为什么,也许是我搜索能力差,我没有找到解释。

谁能给我解释一下?非常感谢。

标签: javascriptregex

解决方案


原因是您编写正则表达式的方式。在字符串中,\字符用于转义,这就是导致您在此处看到的行为的原因。还有另一种编写正则表达式的方法,它遵循与这些正则表达式测试网站使用的相同规则。不同之处只是将字符串包装在正斜杠而不是引号中。

var reg = /\{\$name\}/;

是相同的

var reg = "\{\\$name\}";

推荐阅读