Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: user1878413Ответов: 1

К сожалению, я тщетно пытаюсь написать подходящее регулярное выражение 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 слов + триггерное слово (собака)

javascriptregex

Ответы

Ответ 1 · Wiktor Stribiżew

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

^(?=.*\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 как целые слова.

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы