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

Я пытался сосредоточиться на использовании регулярных выражений в javascript (не эксперт), но мне не удалось решить эту проблему.

Это шаблон для моего URL:

https://www.prefix.site.com

И мое текущее регулярное выражение:

/(?:(\w+)\.)?site\.com

Что мне нужно сделать, это захватить префикс, который находится перед «.site», но яне хочу включать 'https://www.',, учитывая, что оба' www. 'и мой префикс может или не может присутствовать.Примером моего префикса может быть окружение, например https://testing.site.com

Проблема с регулярным выражением сверху заключается в том, что ЕСЛИ существует «www».без моего префикса, он будет захватывать «www».в качестве префикса, и это не то, что мне нужно.

Я вроде решил это с отрицательным взглядом назад, но так как он не доступен в javascript, я не могу его использовать.

Любые советы будут действительно оценены!

Ответы [ 3 ]

0 голосов
/ 15 декабря 2018

В самом начале группы захвата, вы можете отрицательно смотреть на www., чтобы гарантировать, что группа захвата будет совпадать, только если она содержит что-то отличное от www.:

((?!www\.)\b\w+\.)?site\.com

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

Обратите внимание на границу слова \b - чтобы убедиться, что группа захвата либо начинается после несловесного символа (например, / или .), либо не совпадает привсе (для предотвращения совпадений, таких как ww.site.com, где перед ним стоит третий w)

0 голосов
/ 15 декабря 2018

В соответствии с вашими потребностями, это выражение будет захватывать только префикс: (?!w{1,3}\.)[\w-]+(?=\.example)

https://regex101.com/r/X4L9ZZ/2

Он поддерживает тире, а также правильно разрешает "w" в вашем префиксе / суб-domain.

Пример:

const getPrefix = uri => {
  const matched = uri.match(/(?!w{1,3}\.)[\w-]+(?=\.example)/);
  return matched && matched[0];
}

getPrefix("https://www.prefix.example.com"); // "prefix"
getPrefix("https://prefix.example.com"); // "prefix"
getPrefix("https://www.example.com"); // null
getPrefix("https://example.com"); // null

Хорошая новость заключается в том, что "lookbehinds" скоро будет полностью поддерживаться в JS.Это уже на 4-м этапе, и его нужно реализовать в разных браузерах!https://github.com/tc39/proposal-regexp-lookbehind

0 голосов
/ 15 декабря 2018

Похоже, что вам подойдет следующее:

https?://(?:w{3}\.)?(\w+)\.site\.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...