在正则表达式替换字符串中转义$

时间:2014-10-05 17:18:49

标签: javascript regex

我想将字符串dkfj-dkfj-sflj转换为dkfj-woop$dkfj-sflj

这是我尝试过的:

var my_string = "dkfj-dkfj-sflj";
var regex = new RegExp("(\\w+)-(\\w+)-(\\w+)", "g");
console.log(my_string.replace(regex, "$1$woop[\$$2]$3");

我的结果是:dkfj-woop$2-sflj。因为“$”位于“$ 2”捕获组的前面,所以它会使捕获组混乱。

假设我希望我的正则表达式和捕获组字符串的结构保持不变,那么什么是逃避“$”的正确方法,以便它可以工作?

2 个答案:

答案 0 :(得分:3)

这不是$ replace的{​​{1}}。反斜杠转义在解析器级别工作,像replace这样的函数不能为\$之类的新转义序列赋予特殊含义,因为它们甚至不会 \$。字符串"\$"与字符串"$"完全等效,两者都生成相同的字符串。如果你想将反斜杠和美元符号传递给函数,那么反斜杠本身需要转义:"\\$"

无论如何,replace希望您使用$转义$$。你需要"$1$woop[$$$2]$3";文字$$$,捕获组为$2

replace文档中阅读Specifying a string as a parameter

答案 1 :(得分:1)

在替换部件中使用$$来打印文字$符号,如果您的图案包含在正斜杠中,则不需要在替换部件中添加字符类。< / p>

> var my_string = "dkfj-dkfj-sflj";
undefined
> my_string.replace(/(\w+)-\w+-(\w+)/, "$1-woop$$$1-$2")
'dkfj-woop$dkfj-sflj'