【发布时间】:2016-06-18 20:37:48
【问题描述】:
我正在尝试匹配不符合模式name (CA) 或barbaz (UK) 的字符串。我似乎已经使用答案here 解决了这个问题,但这是我开始的,我想知道为什么它不起作用:
var r1 = /^.+(?!\([A-Z]{2}\))$/;
r1.test('foo'); //true
r1.test('foo (US)'); //whoops -also true
通过阅读否定的前瞻doc,我希望任何没有跟随的字符串,例如(JP) 将导致匹配,而任何 is 后跟例如(DE) 会失败。 (仅满足前者)。
我认为.+ 可能有点“消耗”一切,使前瞻无效,所以我尝试了
r2 = /^[^()]+(?!\([A-Z]+\))$/;
r2.test('name (US)'); //false
r2.test('foo('); //whoops -also false
但是我需要像 foo( 这样的东西来匹配。
为什么我的第一次尝试失败了?
【问题讨论】:
标签: javascript regex regex-lookarounds