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

时间:2015-07-02 14:33:31

标签: javascript regex

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

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

==>

AAC

如何使它达到预期效果?

2 个答案:

答案 0 :(得分:70)

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

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

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

  

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

其他模式:

enter image description here

小提琴:

http://jsfiddle.net/8kou1z3q/

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

编辑:

值得一提的是,在我看来,与以上不匹配的任何模式都不需要转义,因此{ {1}}不需要转义,$也会发生相同的故事。

在上面的评论中,用户询问了为什么需要"逃避" $与另一个$:尽管我对此并不十分肯定,但我认为值得指出的是,根据我们上面的说法,任何无效模式都不会被解释,因此我认为(并且怀疑,在这一点上)$$是一个非常特殊的情况,因为它涵盖了你需要用美元符号替换匹配的情况,然后是"模式锁定&#34 ;字符,如tick(`)作为例子(或实际上是&另一个)。

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

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

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

提起更多案件:

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

答案 1 :(得分:46)

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

MDN: String.prototype.replace(): Specifying a string as a parameter

  

$$插入“$”。
   $`插入匹配子字符串之前的字符串部分。

只要$不会产生具有特殊含义的组合,那么它将作为常规字符处理。但是您仍然应该在替换中将其写为$$,否则,如果添加了新的$x组合,它将来可能会失败。