为什么JS方法replace()
在最新版本的Safari(11.1)中使用“$<”在第二个参数中工作不正确?
示例:
"aaaXXXbbb".replace(/XXX/, '_before_$<_after_')
实际结果:
"aaa$<_after_bbb"
预期结果:
"aaa_before_$<_after_bbb"
PS:“$$”插入“$”并解决了这个问题
答案 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。