为什么此代码会打印AAC
而不是预期A$`C
?
console.log('ABC'.replace('B', '$`'));
==>
AAC
如何使它达到预期效果?
答案 0 :(得分:70)
console.log('ABC'.replace('B', "$$`"));
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace
要插入$,你必须传递$$,因为$`:
插入匹配子字符串之前的字符串部分。
其他模式:
小提琴:
此外,我在上面发布的参考链接上还有更多内容。如果您仍然有任何问题或疑问,您可以在那里找到答案,上面的截图来自答案开头的链接。
编辑:
值得一提的是,在我看来,与以上不匹配的任何模式都不需要转义,因此{ {1}}不需要转义,$
也会发生相同的故事。
在上面的评论中,用户询问了为什么需要"逃避" $与另一个$:尽管我对此并不十分肯定,但我认为值得指出的是,根据我们上面的说法,任何无效模式都不会被解释,因此我认为(并且怀疑,在这一点上)$$是一个非常特殊的情况,因为它涵盖了你需要用美元符号替换匹配的情况,然后是"模式锁定&#34 ;字符,如tick(`)作为例子(或实际上是&另一个)。
在任何其他情况下,美元符号不需要被转义,因此他们决定创建这样一个特定规则可能是有意义的,否则你会&#39我需要逃离其他地方的$(我认为这可能会对任何字符串对象产生影响,因为这意味着即使在$AAA
你也需要逃避var a = "hello, $ hey this one is a dollar";
{1}})。
如果您仍然感兴趣并希望了解更多信息,请另请查看:
http://www.regular-expressions.info/javascript.html#replace
提起更多案件:
答案 1 :(得分:46)
在replacement
中,$
美元符号具有特殊含义,并且应在replacement
中使用匹配数据时使用。
MDN: String.prototype.replace(): Specifying a string as a parameter
$$插入“$”。
$`插入匹配子字符串之前的字符串部分。
只要$
不会产生具有特殊含义的组合,那么它将作为常规字符处理。但是您仍然应该在替换中将其写为$$
,否则,如果添加了新的$x
组合,它将来可能会失败。