【发布时间】:2011-04-03 19:27:54
【问题描述】:
我想知道是否可以在组内排除部分匹配项。
我相信/(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 正则表达式方言写这个。
【问题讨论】:
标签: javascript regex regex-group