为什么JS方法replace()在最新版本的Safari中工作不正确?

时间:2018-04-14 15:21:09

标签: javascript regex replace safari

为什么JS方法replace()在最新版本的Safari(11.1)中使用“$<”在第二个参数中工作不正确?

示例:

"aaaXXXbbb".replace(/XXX/, '_before_$<_after_')

实际结果:

"aaa$<_after_bbb"

预期结果:

"aaa_before_$<_after_bbb"

PS:“$$”插入“$”并解决了这个问题

1 个答案:

答案 0 :(得分:2)

这种行为在Firefox或Chrome中都不会发生,我想我理解为什么。

新功能已被接受包含在名为'Regex Named Capture Groups'的ECMAScript规范的下一版本中,顾名思义,它允许您在正则表达式中为捕获组指定名称。此功能添加的内容之一是a new addition to the replacement string syntax,它允许您插入命名捕获组的值。

此语法采用$<captureName>形式 - 请注意开头的$<

根据the latest iteration of the spec,如果您尚未使用相应的$<关闭>,则应将其忽略,并将其视为文本的一部分。浏览器中显示的行为与此不符,因此我认为您很可能发现了错误!

我将你带到report it to WebKit via the process detailed on their website