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

时间:2017-05-25 17:49:37

标签: javascript regex

想知道是否有必要在Javascript中的替换操作的替换字符串中转义某些字符。我有这个:

let t = "##links##";
let t2 = t.replace(/##links##/, `{"labels": ["'$'"]}`);
console.log(t2);

控制台输出是:

{"labels": ["'"]}

这是非常令人惊讶的。但是,我在文档中找不到任何建议逃避替换字符串的内容。那么,这里发生了什么?

2 个答案:

答案 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对象。
  •