Как я могу сопоставить корень доменного имени без www. используя регулярное выражение - PullRequest
6 голосов
/ 08 апреля 2019

Я пытаюсь сопоставить корень имени домена с регулярными выражениями в JS. У меня проблема, когда путь не имеет www. в себе.

Например, я попытался найти соответствие из этой строки:

(http://web.archive.org/web/20080620033027/http://www.mrvc.indianrail.gov.in/overview.htm)

Это регулярное выражение того, что я пробую, представлено ниже. Я пробую его на regex101.com

/(?<=(\/\/(www\.)|\/\/)).+?(?=\/)/g

Я ожидаю выходной массив с именами web.archive.org и mrvc.indianrail.gov.in, но получу web.archive.org и www.mrvc.indianrail.gov.in с www. во втором случае.

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Как насчет этого регулярного выражения:

(?<=https?:\/\/(?:www\.)?)(?!www\.).+?(?=\/)

соответствует web.archive.org и mrvc.indianrail.gov.in без www.

демо: https://regex101.com/r/5ZqK7n/3/

Различия с вашим начальным регулярным выражением:

  • В вашем положительном предложении lookbehind у меня есть s? для поддержки https: URL (удалите его, если не нужно)
  • (?:www\.)? может появляться от 0 до 1 раз

  • После просмотра сзади вы добавляете отрицательный прогноз (?!www\.), чтобы он не совпадал, чтобы ваш .+? не совпадал с начальным www.

0 голосов
/ 08 апреля 2019

Сначала вы должны понять, как соотносится регулярное выражение.

Если вы задаете или (|) группу, она соответствует целой группе для каждого символа.Например, ввод 123 122 и шаблон (123|12).Вторая группа (12) всегда соответствует обоим двум словам.

Поскольку первый и второй символ обоих слов соответствуют 12 группе, уже находящейся во втором символе, нет необходимости проверять третий символ.

Я думаю, что ваша цель состоит в том, чтобы сначала применить 123 группу для целого слова (123) и игнорировать 12 группу, потому что 123 группа уже соответствует.

Я предлагаю не использовать оглядку назад и получитьпервая группа (1 доллар), например:

\/\/(?:www\.)?(.+?)\/

https://regex101.com/r/Ufxzeq/1

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