我想知道是否有可能排除小组比赛的一部分。
我相信/(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/