JavaScript:好的部分;为什么前瞻不好?

时间:2009-12-03 22:30:01

标签: javascript regex regex-lookarounds

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

他解释了\b不好的原因(它使用\w进行字边界查找,而\w对于使用unicode字符的任何语言都失败了),看起来像是对我很好的理由。

不幸的是,正面和负面前瞻不好的原因被遗漏了,我无法想出一个。 Mastering Regular Expressions向我展示了前瞻性的力量(当然也解释了它带来的问题),但我无法想到任何可以将其视为“不是很好的部分”的东西。

任何人都可以解释为什么JavaScript(正|负)前瞻或(正|负)前瞻通常应被视为“不好”?

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

3 个答案:

答案 0 :(得分:10)

也许是因为Internet Explorer的perpetually buggy implementation of lookaheads。对于任何编写有关JavaScript的书籍的人来说,任何在IE中不起作用的功能都可能不存在。

答案 1 :(得分:3)

我能想到的唯一原因可能是它们只受到大约一半流行的正则表达式引擎的支持,但是如果你将自己局限于普遍支持的语法,那么你有很多事情是你做不到的。

顺便说一下(正面|负面)(lookahead | lookbehind)有时统称为“lookaround”,就像在这个页面中比较各种实现中的功能支持一样:

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

答案 2 :(得分:2)

他们对他来说太难了?

Or:lookaheads和lookbehinds(后者在JavaScript中不受支持)大大增加了regex时间。但是,通常不会通过JavaScript中的大量数据进行重复处理。所以他们很棒;在它们有用时使用它们。