Мне интересно, возможно ли исключить часть совпадения в группе.
Я считаю, что /(foo((?:bar)|(bad)))/
приводит к совпадению "foobar" или "foobad" и группы 1, содержащей "foobar"или "foobad".Я бы хотел, чтобы он совпадал с "foobar" или "foobad", но группа 1 содержит только "foo" или "foobad".Я знаю, что синтаксис (?:...)
regex используется для создания группы, на которую вы не сможете ссылаться позже, но приведенное выше использование означает, что существует 3 группы: \ 1 полное соответствие;\ 2 либо «бар», либо «плохо»;\ NONE - неиспользуемая группа 'bar';и \ 3 за «плохо».
Вы видите, куда я иду?Я хочу по желанию исключить подгруппу из другой группы.
В качестве альтернативы, я хотел бы определить группу 1 дважды ИЛИ способом /(foobar)|(foobad)/
, хотя я знаю, что ввод не будет выполнять то, что я хотел.В этом случае попытка получить доступ к match[1]
приведет к ошибке «undefined», если в качестве входных данных будет указано «foobad».Я знаю, что это потому, что он фактически разбивает его на группу 1 и / или группу 2.
Я пишу это на диалекте регулярных выражений javascript.