我想知道在JavaScript的替换操作中,是否有必要转义替换字符串中的某些字符。我的代码如下:
let t = "##links##";
let t2 = t.replace(/##links##/, `{"labels": ["'$'"]}`);
console.log(t2);
控制台输出为:
{"labels": ["'"]}
这相当令人惊讶。然而,我在文档中找不到任何表明需要对替换字符串进行转义的内容。那么这里到底发生了什么?
我想知道在JavaScript的替换操作中,是否有必要转义替换字符串中的某些字符。我的代码如下:
let t = "##links##";
let t2 = t.replace(/##links##/, `{"labels": ["'$'"]}`);
console.log(t2);
{"labels": ["'"]}
这相当令人惊讶。然而,我在文档中找不到任何表明需要对替换字符串进行转义的内容。那么这里到底发生了什么?
您需要将$
符号加倍以替换为字面意义的$
:
let t = "##links##";
let t2 = t.replace(/##links##/, `{"labels": ["'$$'"]}`);
console.log(t2);
$
开始了“特殊”序列。因此,它应该以某种方式进行转义。在JS中,美元符号用于转义文字美元符号。 $&
是对整个匹配的反向引用,$`
插入与匹配子字符串之前的字符串部分,$'
插入匹配子字符串之后的字符串部分。$n
是对第n组的反向引用。let t = "##links##";
let rep = `{"labels": ["'$'"]}`;
let t2 = t.replace(/##links##/, rep.replace(/\$/g, '$$$$'));
console.log(t2);
$
这个字符。一旦你用另一个 $
对它进行转义,替换字符串就会被视为字面字符串。 - Wiktor Stribiżew$
)在replace
中具有特殊意义。如果您想要一个单独的、字面意义上的美元符号,请使用$$
。否则,替换字符串可以包括以下特殊替换模式:
$$
插入一个$
。$&
插入匹配的子字符串。$`
插入匹配的子字符串之前的部分。$'
插入匹配的子字符串之后的部分。$n
其中n
是小于100的正整数,插入第n
个括号子匹配字符串,前提是第一个参数是RegExp
对象。