我想知道是否可以在组内排除部分匹配项。
我相信这/(foo((?:bar)|(bad)))/
会导致匹配“foobar”或“foobad”以及包含“foobar”或“foobad”的第 1 组。我希望它匹配“foobar”或“foobad”,但第 1 组仅包含“foo”或“foobad”。我知道(?:...)
正则表达式语法用于创建一个您以后无法引用的组,但上述用法意味着有 3 个组: \1 整个匹配项;\2 'bar' 或 'bad'; \NONE 是未使用的组 'bar';和 \3 为“坏”。
你知道我要去哪里吗?我想有选择地从另一个组中排除一个子组。
或者,我想以 OR 方式定义组 1 两次,/(foobar)|(foobad)/
尽管我知道输入不会做我想要的。在这种情况下,如果将“foobad”作为输入,尝试访问match[1]
会导致“未定义”错误。我知道这是因为它实际上将其分为第 1 组和/或第 2 组。
我正在用 javascript 正则表达式方言写这个。