我想将字符串 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”捕获组前面,所以它会弄乱该捕获组。
假设我希望正则表达式和捕获组字符串的结构保持不变,那么转义“$”以使其有效的正确方法是什么?
最佳答案
这不是为 replace
转义 $
的方式。反斜杠转义在解析器级别起作用,像 replace
这样的函数不能为像 \$
这样的新转义序列赋予特殊含义,因为它们甚至看不到 \$
。字符串 "\$"
与字符串 "$"
完全相同,两者生成相同的字符串。如果您想将反斜杠和美元符号传递给函数,则反斜杠本身需要转义:"\\$"
。
无论如何,replace
希望您使用 $$
转义 $
。您需要“$1$woop[$$$2]$3”
; $$
表示文字 $
,$2
表示捕获组。
阅读Specifying a string as a parameter在replace
文档中。
关于javascript - 在正则表达式替换字符串中转义 $,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26205178/