为什么'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部分。
其他模式:
小提琴:
而且,我上面发布的参考链接还有更多的东西。 如果您仍然有任何疑问或疑问,您可能会在那里find答案,上面的屏幕截图是从答案开始处发布的链接中获取的。
编辑:
在我看来,值得一提的是, 任何不符合上述的模式都不需要逃避 ,因此$
不需要被转义,同样的情况发生在$AAA
。
在上面的评论中,用户询问了为什么你需要用另一个$“逃避”$:尽pipe我并不确定,但我认为还应该指出,从我们上面所说的, 任何无效的模式不会被解释 ,因此我认为(并且怀疑在这一点上)$$是一个非常特殊的情况,因为它涵盖了你需要用美元符号replace匹配,然后是“模式locking”字符,就像蜱(`)一样(或者真的是另一个)。
然而,在其他情况下,美元符号不需要被转义 ,因此他们决定创build这样一个特定的规则可能是有道理的,否则你将需要在其他地方逃避$(我认为这是可能会对任何string对象产生影响,因为这意味着即使在var a = "hello, $ hey this one is a dollar";
您将需要转义$
)。
如果您仍然感兴趣并想要阅读更多内容,请查看以下内容:
http://www.regular-expressions.info/javascript.html#replace
摆弄更多案例:
在replacement
, $
美元符号具有特殊含义,并且在replacement
时应使用数据forms匹配时使用。
MDN:String.prototype.replace():指定一个string作为参数
$$插入一个“$”。
$`插入匹配子string之前的string部分。
只要$
不会导致具有特殊含义的组合,那么它将只是作为常规字符处理。 但是你应该总是把它写成$$
,否则如果添加新的$x
组合,它可能会失败。