Регулярное выражение для сопоставления некоторых слов, исключая строки с точкой - PullRequest
0 голосов
/ 31 октября 2018

Какому регулярному выражению соответствует "Colorado", "Co" или "CO", исключая строки, содержащие такой период, как "Co." или "co."?

Это:

/\b(Colorado|Co|CO)\b/i

соответствует двум экземплярам "CO". Как исключить совпадения, содержащие точку?

Это:

\b(?:(?!Co\.)\w)+\b

игнорирует "Co.", но я не могу понять, как объединить это с разрешенными ключевыми словами.

1 Ответ

0 голосов
/ 31 октября 2018

Вы можете добавить отрицательный прогноз после Co:

/\b(Colorado|Co(?!\.))\b/i
               ^^^^^^

См. Демоверсию Rubular

Примечание. Я пропустил альтернативу co, поскольку вы используете без учета регистра модификатор i, который делает Co равным co.

Другой способ - добавить отрицательный прогноз перед группой после первого \b:

/\b(?!Co\.)(Colorado|Co)\b/i
   ^^^^^^^^ 

См. еще одну демонстрацию Rubular .

Здесь \b устанавливает позицию на границе слова, затем (?!Co\.) не находит совпадения, если Co. - текст непосредственно справа от текущего местоположения, а (Colorado|Co)\b соответствует целому слову Colorado или Co.

Обратите внимание, что вы можете дополнительно сократить шаблон, если напишите его вручную, например

/\b(?!Co\.)Co(?:lorado)?\b/i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...