为什么 Javascript 不支持lookbehind断言?

2024-06-25

最近我意识到(因有些尴尬) 正则表达式lookbehind assertions were not可能在Javascript.

这种看似常见的断言不存在的(事实)原因是什么?

我意识到也许有其他方法可以实现同样的目标 https://stackoverflow.com/questions/7376238/javascript-regex-look-behind-alternative,尽管它是工作中的基本语义禁止该功能,还是到底是什么?

似乎也有一些正则表达式测试工具 https://regex101.com/r/jR9uU5/1从正则表达式模式生成 Javascript 代码的方法似乎忽略了这个事实——这让我觉得有点奇怪。


Today

Lookbehind 现在是官方的一部分ES 2018 规范 https://tc39.github.io/ecma262/。阿克塞尔·劳施迈尔 (Axel Rauschmayer) 给出了他的博客文章中有很好的介绍 http://2ality.com/2017/05/regexp-lookbehind-assertions.html.

History

看起来当时 Brendan Eich 并不知道它的存在 https://mail.mozilla.org/pipermail/es-discuss/2010-November/012165.html(因为 Netscape 是基于旧版本的 Perl 构建的):

那是 1998 年,我在 97 年所做的 Netscape 4 工作是基于 Perl 4(!),但我们向 ECMA TC39 TG1(JS 组——当时情况不同,包括大写)提议了一些基于 Perl 5 的东西。我们没有并不能得到所有的东西,我们必须合理化一些明显的怪癖。

我不记得lookbehind(它出现在98年7月的Perl 5.005中)被故意排除。 Waldemar 可能还记得更多,我把 netscape.com 内的 JS 密钥交给了他,让他可以去 mozilla.org。

如果您想编写提案或迷你规范(甚至是 ES5 的风格),请告诉我。下周我将与其他 TC39 成员讨论这个问题。

/be

邮件列表上有很多不同的尝试将其包含在内,但从性能角度来看,它仍然是一个相当复杂的功能,因为EcmaScript 正则表达式 https://esdiscuss.org/topic/regexp-lookbehind#content-7 are 回溯 https://msdn.microsoft.com/en-us/library/dsy130b4%28v=vs.110%29.aspx使用捕获组时,回溯需要基于和回溯。这可能会导致诸如以下的问题灾难性的回溯 http://www.regular-expressions.info/catastrophic.html当使用不正确时。

在某个时候,它被建议用于 ES6/Es 2015,但它从未形成草案,更不用说规范了。在里面讨论中的最后一个帖子 https://www.mail-archive.com/es-discuss@mozilla.org/msg26650.html,似乎没有人承担起实施它的任务。如果有人觉得需要编写一个实现,他们可以注册ES 讨论列表 https://mail.mozilla.org/listinfo/es-discuss并提出它。

2015 年 5 月更新:

2015年5月,Nozomu Katō 提出了 ES7 后视实现 https://esdiscuss.org/topic/look-behind-proposal.

2015 年 9 月更新:

正则表达式后视被添加为第0阶段提案 https://github.com/tc39/ecma262/blob/master/stage0.md.

2017 年 5 月更新:

该提案目前处于第 3 阶段 https://github.com/tc39/proposal-regexp-lookbehind。这意味着现在至少有两个浏览器需要实现它才能成为下一个 EcmaScript 标准的一部分。正如@martixy 在评论中提到的,Chrome已经在JS实验标志后面实现了它 https://v8project.blogspot.ch/2016/02/regexp-lookbehind-assertions.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Javascript 不支持lookbehind断言? 的相关文章

随机推荐