[英]Is it necessary to escape the replacement string in a String.replace() call with a regular expression?
不知道是否有必要在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);
美元符号( $
)特别replace
。 如果你想要一个单一的文字美元符号,请使用$$
。 否则, 替换字符串可以包含以下特殊替换模式 :
$$
插入一个$
。$&
插入匹配的子字符串。$`
插入匹配子字符串之前的字符串部分。$'
插入匹配子字符串后面的字符串部分。$n
其中n
是小于100的正整数,插入第n
个带括号的子匹配字符串,前提是第一个参数是RegExp
对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.