为什么JavaScript没有后行断言?

3
我知道有各种解决方案,但很奇怪一个相当常见/有用的正则表达式特性在JavaScript中不可用。
这是否有任何原因(例如性能问题、实现问题等),或者它最初没有被添加,现在已经太晚/不需要了呢?

为什么0.1 + 0.2不等于0.3? - Derek 朕會功夫
3
不实现正则表达式引擎中的“向后查找”功能的一个好理由是,它会使其非正则化(这也是为什么Perl称其字符串匹配语法为regex而不是regexp的原因之一)。具体来说,向后查找会使编译正则表达式成为状态机变得不可能。如果你不能这样做,那么你就会遇到所谓的病态慢表达式,而没有向后查找的引擎可以避免这种情况。此外,非状态机引擎即使在普通情况下也往往速度较慢。例如,Tcl被基准测试证明比Perl正则表达式要快得多。 - slebetman
@slebetman 谢谢你提供了一个真正好的理由,而不仅仅是“它就是没有”。你应该将你的评论提交为答案 :) - EpicDavi
1
最好在http://esdiscuss.org/上提问。 - Felix Kling
3个回答

6

因为没有足够的JS开发者走进网景和ECMA International的办公室,举着标语牌喊道:

我们现在就要回溯!时机成熟了!

但现在还不晚。你可以开始一场运动,许多关注regex标签的人会跟随你。

领导我们吧,冠军!:)


1

简单来说,它就是不支持

编程语言并不能拥有其他语言中所有可用的功能。

为什么JavaScript没有静态类型?为什么它不支持多重继承?它只是以这种方式构建。


2
在我提出问题的时候,我没有意识到有这么多种正则表达式。话虽如此,JavaScript 有向前查找,因此看起来向后查找也应该可用。我只是想知道是否有除了“因为它不支持”之外的其他原因,例如性能问题。 - EpicDavi

1

为什么? JavaScript 正则表达式引擎显然不支持向后查找。

但是,您可以使用 XRegExp 库或使用 String.replace() 和可选捕获组来模拟使用向后查找。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接