想知道是否有必要在Javascript中的替换操作的替换字符串中转义某些字符。我有这个:
let t = "##links##";
let t2 = t.replace(/##links##/, `{"labels": ["'$'"]}`);
console.log(t2);
控制台输出是:
{"labels": ["'"]}
这是非常令人惊讶的。但是,我在文档中找不到任何建议逃避替换字符串的内容。那么,这里发生了什么?
答案 0 :(得分:1)
您需要将$
符号翻倍,以替换为文字$
:
let t = "##links##";
let t2 = t.replace(/##links##/, `{"labels": ["'$$'"]}`);
console.log(t2);

请参阅Specifying a string as a parameter列出所有可能的"特殊"正则表达式替换部分内的组合。
如果您检查该表格,您会看到$
启动"特殊"序列。因此,它应该以某种方式逃脱。在JS中,一美元用于逃避文字美元符号。 $&
是对整个匹配的反向引用,$`
插入匹配子字符串之前的字符串部分,$'
插入匹配子字符串后面的字符串部分。 $n
是群组 n 的后退。
所以,如果你有一个动态的,用户定义的替换字符串,不应该有反向引用,你可以使用
let t = "##links##";
let rep = `{"labels": ["'$'"]}`;
let t2 = t.replace(/##links##/, rep.replace(/\$/g, '$$$$'));
console.log(t2);

答案 1 :(得分:1)
美元符号($
)在replace
中很特别。如果您想要单个文字美元符号,请使用$$
。否则,the replacement string can include the following special replacement patterns:
$$
插入$
。$&
插入匹配的子字符串。$`
插入匹配子字符串之前的字符串部分。$'
插入匹配子字符串后面的字符串部分。$n
其中n
是一个小于100的正整数,插入n
带括号的子匹配字符串,前提是第一个参数 是一个RegExp
对象。