При условии, что ваш тип регулярных выражений включает группы захвата, это легко решается с помощью Лучший трюк регулярных выражений , предварительное исключение. По существу:
"string".match(/(?:a|b|c)job|(a|b|c)/).match_group(1)
, где:
?:
: не сохранять предыдущее исключение в группе захвата;
(a|b|c)job
- строки, которые следует избегать захвата;
|(a|b|c)
- это строки для захвата.
Это работает, потому что если текст соответствует нежелательному тексту ajob
, то группа захвата никогда не заполняется. Заполняется только в том случае, если нужный текст a
соответствует без ajob