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

exe*_*ook 70 javascript regex

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

console.log('ABC'.replace('B', '$`'));
Run Code Online (Sandbox Code Playgroud)

==>

AAC
Run Code Online (Sandbox Code Playgroud)

以及如何使它达到预期的效果?

bri*_*eje 70

console.log('ABC'.replace('B', "$$`"));
Run Code Online (Sandbox Code Playgroud)

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

要插入$,你必须传递$$,因为$`:

插入匹配子字符串之前的字符串部分.

其他模式:

在此输入图像描述

小提琴:

http://jsfiddle.net/8kou1z3q/

此外,我在上面发布的参考链接上还有更多内容.如果您仍然有任何问题或疑问,您可以在那里找到答案,上面的截图是从答案开头发布的链接中获取的.

编辑:

在我看来,值得一提的是,任何与上述匹配的模式都不需要转义,因此$不需要转义,同样的故事也会发生$AAA.

在上面的评论中,用户询问为什么你需要用另一个$"逃避"$:尽管我不能确定这一点,但我认为从我们上面所说的,任何无效的模式也值得指出不会被解释,因此我认为(并且怀疑,在这一点上)$$是一个非常特殊的情况,因为它涵盖了你需要用美元符号替换匹配然后"模式锁定"的情况字符,像tick(`)作为一个例子(或真正的&作为另一个).

但在任何其他情况下,美元符号不需要被转义,因此它们可能有意义地决定创建这样一个特定的规则,否则你将需要逃避其他地方的$(我认为这可能会对任何字符串对象产生影响,因为这意味着即使在var a = "hello, $ hey this one is a dollar";你需要逃避它的时候也是如此$.

如果您仍然感兴趣并希望了解更多信息,请查看此信息:

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

摆弄更多案件:

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


t.n*_*ese 46

replacement$美元符号有特殊含义,当从比赛数据应在使用使用replacement.

MDN:String.prototype.replace():将字符串指定为参数

$$插入"$".
$`插入匹配子字符串之前的字符串部分.

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

  • 单独的$ sign不会导致此行为,只有美元+后退滴答组合 (2认同)