Что я вижу в документации , так это то, что функция .match
Пытается полностью сопоставить строку s с шаблоном регулярных выражений p и возвращает массив групп захвата .
Для соответствия одному из них, но не обоим, вы можете использовать положительный и отрицательный lookahead , если это поддерживается.
Чтобы сопоставить любой из вариантов, используйте чередование , чтобы убедиться, что одно из слов есть, а другое нет, и наоборот:
(?:(?!.*\bdiscount\b).*\boffer\b.*|(?!.*\boffer).*\bdiscount\b.*)
Regex demo
Это будет соответствовать
(?:
Группа без захвата
(?!.*\bdiscount\b).*\boffer\b.*
Утверждают, что справа нет скидок и сопоставляют любые символы и предложения
|
или
(?!.*\boffer).*\bdiscount\b.*
Или утверждать обратное
)
Закрыть группу без захвата