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

标签 javascript regex

想知道是否有必要在 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);

参见 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);

关于javascript - 是否有必要使用正则表达式在 String.replace() 调用中转义替换字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44186787/

相关文章:

javascript - 触发点击以id结尾的按钮以数字结尾

objective-c - 正则表达式提取步骤数

c# - NET正则表达式:{1}不起作用

regex - 使用?=。正则表达式

javascript - JS检查元素 block 是否包含一个或几个单词而不是运行代码的最佳方法

javascript - 与 jdmenu、positionBy 和 jquery 冲突

python - 通过将正则表达式转换为 'Str' 从 Python 中的字符串中剥离日期

javascript - 与 IP 地址匹配的动态 AngularJS 验证,但最后一个八位字节在特定范围内

javascript - .style 在 JS 中不起作用

javascript - Showdown.js 扩展修改 html