为什么打印此代码AAC
而不是预期的代码A$`C
?
console.log('ABC'.replace('B', '$`'));
==>
AAC
以及如何使其达到预期效果?
为什么打印此代码AAC
而不是预期的代码A$`C
?
console.log('ABC'.replace('B', '$`'));
==>
AAC
以及如何使其达到预期效果?
RegExp.$`
属性是非标准的。$`
在替换字符串中是标准的。
$
用反斜杠\\转义不能产生正确的结果(即“ \ $`”)吗?
$
。
Answers:
console.log('ABC'.replace('B', "$$`"));
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace
要插入$,您必须传递$$,因为$`:
插入字符串中匹配子字符串之前的部分。
其他模式:
小提琴:
另外,我在上面发布的参考链接上还有更多内容。如果仍然有任何问题或疑问,您可能可以在此处找到答案,上面的屏幕截图取自答案开头发布的链接。
编辑:
在我看来,值得一提的是,任何不符合上述条件的模式都不需要转义,因此$
也不需要转义,同样的故事也会发生$AAA
。
在上面的评论中,用户询问您为什么需要用另一个$“转义” $:尽管我不确定,但我认为从我们上面所说的内容来看,任何无效的模式也值得一提不会被解释,因此,我认为(并怀疑,在这一点上)$$是一个非常特殊的情况,因为它涵盖了需要用美元符号替换匹配项,然后再进行“模式锁定”的情况字符,例如以勾号(`)为例(或者实际上是&)。
不过,在任何其他情况下,都不需要转义美元符号,因此,他们决定创建这样的特定规则可能很有意义,否则您将需要在其他所有地方转义美元(我认为这可能会对任何字符串对象产生影响,因为这意味着即使var a = "hello, $ hey this one is a dollar";
您也需要转义$
)。
如果您仍然有兴趣并想了解更多信息,请另外检查以下内容:
http://www.regular-expressions.info/javascript.html#replace
摆弄更多案件:
在美元符号中replacement
,$
美元符号具有特殊含义,当匹配项中的数据应用于美元符号时,会使用美元符号replacement
。
MDN:String.prototype.replace():将字符串指定为参数
$$插入“ $”。
$`插入字符串中匹配子字符串之前的部分。
只要$
不会导致具有特殊含义的组合,那么它将被当作常规字符处理。但是您仍应始终将其写为$$
替换,因为否则,如果$x
添加新的组合,将来可能会失败。
$
具有特殊的含义。类似于-
([a-f]
和之间的差异[af-]
)