为什么'ABC'.replace('B','$`')给AAC

为什么这个代码打印AAC而不是预期的A$`C

 console.log('ABC'.replace('B', '$`')); 

==>

 AAC 

以及如何使其达到预期的结果?

 console.log('ABC'.replace('B', "$$`")); 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

要插入$,你必须通过$$,因为$`:

插入匹配子string之前的string部分。

其他模式:

在这里输入图像说明

小提琴:

http://jsfiddle.net/8kou1z3q/

而且,我上面发布的参考链接还有更多的东西。 如果您仍然有任何疑问或疑问,您可能会在那里find答案,上面的屏幕截图是从答案开始处发布的链接中获取的。

编辑:

在我看来,值得一提的是, 任何不符合上述的模式都不需要逃避 ,因此$不需要被转义,同样的情况发生在$AAA

在上面的评论中,用户询问了为什么你需要用另一个$“逃避”$:尽pipe我并不确定,但我认为还应该指出,从我们上面所说的, 任何无效的模式不会被解释 ,因此我认为(并且怀疑在这一点上)$$是一个非常特殊的情况,因为它涵盖了你需要用美元符号replace匹配,然后是“模式locking”字符,就像蜱(`)一样(或者真的是另一个)。

然而,在其他情况下,美元符号不需要被转义 ,因此他们决定创build这样一个特定的规则可能是有道理的,否则你将需要在其他地方逃避$(我认为这是可能会对任何string对象产生影响,因为这意味着即使在var a = "hello, $ hey this one is a dollar";您将需要转义$ )。

如果您仍然感兴趣并想要阅读更多内容,请查看以下内容:

http://www.regular-expressions.info/javascript.html#replace

摆弄更多案例:

http://jsfiddle.net/8kou1z3q/3/

replacement$美元符号具有特殊含义,并且在replacement时应使用数据forms匹配时使用。

MDN:String.prototype.replace():指定一个string作为参数

$$插入一个“$”。
$`插入匹配子string之前的string部分。

只要$不会导致具有特殊含义的组合,那么它将只是作为常规字符处理。 但是你应该总是把它写成$$ ,否则如果添加新的$x组合,它可能会失败。