Домен регулярного выражения не получит .uk домена co.uk - PullRequest
0 голосов
/ 12 февраля 2020

С группой 1 я получаю название домена. Но группа 2 не получит UK домена

Вот код в регулярном выражении: https://regex101.com/r/Svg7KY/1

First try:   /^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^.]+)((?:[.,]\w+))/gm
Second try: /^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^.]+)([,.](?=[^.,]*$)\w+)/gm
nu.co.uk
www.nu.co.uk
http://www.nu.co.uk
https://www.nu.co.uk

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Если вы хотите захватить uk во второй группе захвата, вы можете повторить 0 или более раз, сопоставляя точку, за которой следуют 1+ символов слова.

Затем сопоставьте точку и захватите символы последнего слова в группа 1

^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^.]+)(?:[.,]\w+)*\.(\w+)

о последней части (?:[.,]\w+)*\.(\w+)

  • (?: группа без захвата
    • [.,]\w+ соответствует точке или запятой и 1+ слово символы
  • )* Закрыть группу и повторить 0+ раз
  • \. Совпадение с точкой
  • (\w+) Захват группа 2 , совпадение с 1 + словом символов

Regex demo

0 голосов
/ 12 февраля 2020

Я посмотрел на регулярное выражение в ссылке, которую вы предоставили. Причина, по которой он не соответствует "uk", заключается в том, что в этих примерах встречается больше \.\w+, чем в других. Вы можете просто добавить квантификатор в эту последнюю группу, чтобы он работал:

^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^.]+)((?:[.,]\w+)){1,2}

Кроме того, нужна ли запятая в классе символов последней группы? Если нет, вы можете упростить регулярное выражение до:

^(?:https?:\/\/)?(?:[^@\n]+@)?(?:\w+)(?:\.\w+)+

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...