17

我正在阅读 Douglas Crockfords Javascript: The Good Parts,我刚刚完成了正则表达式一章。在本章中,他称 JavaScript 的\b正向预读(?=)和负向预读(?!) “不是一个好部分”

他解释了\b不好的原因(它\w用于单词边界查找,并且\w对于任何使用 unicode 字符的语言都失败了),这对我来说似乎是一个很好的理由。

不幸的是,正负前瞻不好的原因被遗漏了,我想不出一个。掌握正则表达式向我展示了前瞻带来的强大功能(当然也解释了它带来的问题),但我真的想不出任何可以将其定性为“不好的部分”的东西。

谁能解释为什么 JavaScript (positive|negative) lookahead 或 (positive|negative) lookahead 一般应该被认为是“不好的”?

似乎我不是唯一一个有这个问题的人:

4

3 回答 3

10

可能是因为 Internet Explorer 的前瞻实现永远存在错误。对于任何编写有关 JavaScript 的书籍的人来说,任何在 IE 中不起作用的功能都可能不存在。

于 2009-12-04T01:09:00.140 回答
3

我能想到的唯一原因可能是它们仅被大约一半的流行正则表达式引擎支持,但如果您将自己限制在普遍支持的语法中,那么您将无法做很多事情。

顺便说一下,(positive|negative)(lookahead|lookbehind) 有时统称为“lookaround”,如在此页面中比较了各种实现之间对功能的支持:

http://www.regular-expressions.info/refflavors.html

于 2009-12-03T22:54:04.907 回答
2

他们对他来说太难了?

或者:lookaheads 和lookbehinds(JavaScript 不支持后者)大大增加了正则表达式的时间。但是通常不会通过 JavaScript 中的大量数据进行正则表达式。所以他们很棒;在有用时使用它们。

于 2009-12-03T22:34:25.287 回答