【发布时间】:2011-10-14 16:20:05
【问题描述】:
我想匹配所有以“.htm”结尾的字符串,除非它以“foo.htm”结尾。我通常对正则表达式很满意,但消极的前瞻让我很难过。为什么这不起作用?
/(?!foo)\.htm$/i.test("/foo.htm"); // returns true. I want false.
我应该改用什么?我想我需要一个“负面的behind”表达式(如果 JavaScript 支持这样的事情,我知道它不支持)。
【问题讨论】:
-
很遗憾,JavaScript 不支持正则表达式中的“lookbehind”
-
通常最好有一个带有一两个循环的更简单的正则表达式,而不是一个超级怪物(好吧,你想要的不是超级怪物,但代码有增长的趋势)需要我说不可维护的正则表达式。
-
这可能不及时,但要解释为什么这不起作用:您的正则表达式不是 0 宽度,这意味着在 javascript 中它转换为“匹配 '.htm'但如果它以“foo”开头,则不是,因为“.htm”永远不会以“foo”开头,这是行不通的。否定前瞻的意思是“此时,排除此处否定为真的匹配项”,但它实际上并不消耗字符串。
标签: javascript regex regex-lookarounds