我想将字符串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”捕获组的前面,所以它会使捕获组混乱。
假设我希望我的正则表达式和捕获组字符串的结构保持不变,那么什么是逃避“$”的正确方法,以便它可以工作?
答案 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'