gpt4 book ai didi

javascript - 否定前瞻混淆

转载 作者:行者123 更新时间:2023-12-03 06:42:19 25 4
gpt4 key购买 nike

我正在尝试匹配符合模式name (CA)barbaz (UK) 的字符串。我似乎已经使用答案解决了问题here ,但这就是我开始的地方,我想知道为什么它不起作用:

var r1 = /^.+(?!\([A-Z]{2}\))$/;

r1.test('foo'); //true

r1.test('foo (US)'); //whoops -also true

从读取否定的前瞻 doc我希望任何后面不跟例如的字符串(JP) 将导致匹配,而 后跟的任何内容,例如(DE) 会失败。 (仅满足前者)。

我认为.+可能会“消耗”所有内容,使前瞻无效,所以我尝试了

r2 = /^[^()]+(?!\([A-Z]+\))$/;

r2.test('name (US)'); //false

r2.test('foo('); //whoops -also false

但是我需要诸如 foo( 之类的东西来匹配。

为什么我的第一次尝试失败了?

最佳答案

在您的第一个表达式中,.+ 消耗整个字符串,然后测试前瞻 - 它不匹配,因为没有剩余字符。为了实现您的目标,您可以使用 /^(?!.+\([A-Z]{2}\)$).+$/ - 首先检查不需要的构造是否存在,然后匹配。

参见https://regex101.com/r/aG7xZ0/1与您的 sample

关于javascript - 否定前瞻混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37901429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com