我想知道是否有可能排除小组比赛的一部分。

我相信/(foo((?:bar)|(bad)))/会导致匹配“ foobar”或“ foobad”以及包含“ foobar”或“ foobad”的组1。我希望它匹配“ foobar”或“ foobad”,但组1仅包含“ foo”或“ foobad”。我知道(?:...) regex语法用于组成一个以后无法引用的组,但是上述用法意味着有3个组:\ 1整个匹配项; \ 2'bar'或'bad'; \ NONE是未使用的组“栏”;和\ 3为“坏”。

你知道我要去哪里吗?我想有选择地从另一个组中排除一个子组。

另外,我想以OR方式/(foobar)|(foobad)/定义组1两次,尽管我知道输入无法满足我的要求。在这种情况下,如果输入“ foobad”作为输入,尝试访问match[1]会导致“未定义”错误。我知道这是因为它实际上将其分为组1和/或组2。

我用javascript regex方言写的。

最佳答案

我希望它匹配“ foobar”或“ foobad”,但组1仅包含“ foo”或“ foobad”。


正则表达式:

/(foo(?:(?=bar)|bad))/


这样做:组1包含foo(仅当bar紧随其后)或包含foobad

关于javascript - 正则表达式:请勿在组内包含子字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5531899/

10-12 21:16