繁体   English   中英

是否有必要使用正则表达式转义String.replace()调用中的替换字符串?

[英]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中,一美元用于逃避文字美元符号。 $&是对整个匹配的反向引用, $`插入匹配子字符串之前的字符串部分, $'插入匹配子字符串后面的字符串部分。 $nn组的后退。

因此,如果您有一个动态的,用户定义的替换字符串,不应该有反向引用,您可以使用

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM