Объедините 2 группы JavaScript RegEx с AND и квантификатором

К сожалению, я тщетно пытаюсь написать подходящее регулярное выражение JavaScript, которое соответствует следующему случаю:

  1. он сопоставляется с однострочной строкой, а не с многострочной.
  2. ТОЛЬКО положительный результат, если строка содержит менее 6 слов
  3. И если оно содержит любое из слов "Там", "Это", "Собака".

RegEx для точки 2, вероятно:

^(\s*\S+(?:\s+\S+){1,4}\s*)$ демонстрация

RegEx для точки 3, вероятно:

^(?=.*(There\b|\This\b|\bDog)).*$ демонстрация

Теперь у меня проблема объединить эти 2 регулярных выражения в одно. Я пробовал что-то вроде: ^(\s*\S+(?:\s+\S+){1,5}\s*)(?=.*(There\b|\bThis\b|Dog)).*$ демо

Как я могу правильно совместить там 2 RegEx?

Некоторые примеры:

Hello I am under 6 words -> отрицательный, нет триггерного слова

Hello I am under dog words -> положительный до 6 слов + триггерное слово (собака)

Hello I am dog but with a longer string -> отрицательный, потому что более 6 слов

Dog -> положительный, до 6 слов + триггерное слово (собака)


person user1878413    schedule 09.05.2019    source источник


Ответы (1)


Вы можете поместить просмотр из второго регулярного выражения после ^ в первое регулярное выражение и использовать границы слов вокруг чередования:

^(?=.*\b(?:There|This|Dog)\b)\s*\S+(?:\s+\S+){1,5}\s*$

См. демонстрацию регулярного выражения. Обратите внимание на модификатор без учета регистра в демо (/^(?=.*\b(?:There|This|Dog)\b)\s*\S+(?:\s+\S+){1,5}\s*$/i).

Он соответствует строкам из 6 слов или менее, которые должны содержать There, This или Dog как целые слова.

См. граф регулярного выражения:

введите здесь описание изображения

введите здесь описание изображения

person Wiktor Stribiżew    schedule 09.05.2019
comment
Это потрясающе. Большое спасибо! - person user1878413; 21.05.2019