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


70

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

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

==>

AAC

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



6
@anubhava:此功能非常标准。您链接的文档中描述的属性是非标准的。
Bergi 2015年

2
@anubhava:​RegExp.$`​属性是非标准的。​$`​在替换字符串中是标准的。
nhahtdh 2015年

1
跟进问题:有人知道为什么$用反斜杠\\转义不能产生正确的结果(即“ \ $`”)吗?
fspinnenhirn

2
@greenSocksRock因为无论出于何种原因,它都会逃脱一秒钟$
OJFord

Answers:


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

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace

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

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

其他模式:

在此处输入图片说明

小提琴:

http://jsfiddle.net/8kou1z3q/

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

编辑:

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

在上面的评论中,用户询问您为什么需要用另一个$“转义” $:尽管我不确定,但我认为从我们上面所说的内容来看,任何无效的模式也值得一提不会被解释,因此,我认为(并怀疑,在这一点上)$$是一个非常特殊的情况,因为它涵盖了需要用美元符号替换匹配项,然后再进行“模式锁定”的情况字符,例如以勾号(`)为例(或者实际上是&)。

不过,在任何其他情况下,都不需要转义美元符号,因此,他们决定创建这样的特定规则可能很有意义,否则您将需要在其他所有地方转义美元(我认为这可能会对任何字符串对象产生影响,因为这意味着即使var a = "hello, $ hey this one is a dollar";您也需要转义$)。

如果您仍然有兴趣并想了解更多信息,请另外检查以下内容:

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

摆弄更多案件:

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


46

在美元符号中replacement$美元符号具有特殊含义,当匹配项中的数据应用于美元符号时,会使用美元符号replacement

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

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

只要$不会导致具有特殊含义的组合,那么它将被当作常规字符处理。但是您仍应始终将其写为$$替换,因为否则,如果$x添加新的组合,将来可能会失败。


2
仅$符号不会导致这种行为,只有美元+背钩组合
exebook

1
@exebook肯定是没有问题的。但仍然$具有特殊的含义。类似于-[a-f]和之间的差异[af-]
t.niese
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.