正则表达式正面和负面前瞻性(JavaScript)?

时间:2012-09-26 07:31:15

标签: javascript regex lookahead

我一直在阅读道格拉斯·克罗克福德的“JavaScript:The Good Parts”。在其中,他简要介绍了积极和消极的前瞻,但仅仅是对他们所做的事情的简短陈述,以及他们不是JavaScript的好部分。

除了本书之外,我还没有看到任何提及应该避免这些,无论是在SO还是在正则表达式指南网站上。我想知道我是否可以进一步解释为什么这些是JavaScript的一个不好的部分,以及应该如何避免它们 - 是否有更好的解决方案,或者它是否取决于更好的应用程序设计。


摘录(第75页):

积极前瞻 一个积极的前瞻组有一个(?=前缀。它就像一个非捕获组 除了组匹配后,文本将重绕到组的位置 开始,有效地匹配任何东西这不是一个好的部分。

否定前瞻 负前瞻组有一个(?!前缀。这就像一个积极的前瞻 group,但只有匹配不匹配才会匹配。这不是一个好的部分。

1 个答案:

答案 0 :(得分:4)

道格拉斯·克罗克福德的许多建议都是关于代码的“可读性”和“可复制性”,而且还涉及编码器意图的“可复制性”。与道格拉斯不推荐使用的方式相同,例如,在正则表达式中使用点,因为这匹配任何字符,而不解释您想要匹配的内容,使用否定前瞻等于说“我允许除此之外的任何内容”。无论如何,我无法想象为什么不建议使用积极的前瞻,但是在前瞻性实现中有许多IE错误引用......