Safari 11.1中JS replace()方法含"$<"参数时异常原因咨询
关于Safari 11.1中
replace()方法处理$<时的异常问题 这个问题的核心在于JavaScript的replace()方法对第二个参数里的$符号有特殊语法规则,而Safari 11.1版本在解析$<这个组合时出现了不符合预期的行为。
为什么会出现异常?
当你给replace()的第二个参数传入包含$的字符串时,JavaScript会把某些$开头的组合当作特殊占位符:
$&代表匹配到的整个子串- `$``(注意是反引号)代表匹配子串之前的所有内容
$'代表匹配子串之后的所有内容$n对应正则表达式中第n个捕获组的内容
在Safari 11.1里,它错误地将$<识别成了一个特殊占位符,导致$<前面的_before_被意外截断——从你的示例结果aaa$<_after_bbb就能看出来,原本的_before_直接消失了,这是该版本浏览器的一个特定bug。
解决办法
正如你提到的,要在replace()的第二个参数中插入普通的$字符,必须用$$来转义,这样JavaScript就会把$$解析成单个普通的$,而不是特殊占位符的开头。
修改后的代码如下:
"aaaXXXbbb".replace(/XXX/, '_before_$$<_after_')
执行这段代码后,就能得到你预期的结果:aaa_before_$<_after_bbb。
另外补充一点:这个问题是Safari 11.1的版本专属bug,后续更新的Safari版本已经修复了这个解析错误。如果你的应用场景允许用户升级浏览器,升级也是一个解决途径;但如果需要兼容旧版本的Safari,使用$$转义是最可靠的方案。
内容的提问来源于stack exchange,提问作者Анна Янкович
相关产品推荐
相关产品推荐

