Подтвердить что ты не робот

Javascript/Regex для поиска только корневого имени домена без поддоменов

У меня был поиск и нашел много похожих примеров регулярных выражений, но не совсем то, что мне нужно.

Я хочу иметь возможность передавать следующие URL-адреса и возвращать результаты:

  • www.google.com возвращает google.com

  • sub.domains.are.cool.google.com возвращает google.com

  • doesntmatterhowlongasubdomainis.idont.wantit.google.com возвращает google.com

  • sub.domain.google.com/no/thanks возвращает google.com

Надеюсь, что это имеет смысл:) Спасибо заранее! -James

4b9b3361

Ответ 1

Вы не можете сделать это с помощью регулярного выражения, потому что вы не знаете, сколько блоков в суффиксе.

Например, google.com имеет суффикс com. Чтобы перейти с subdomain.google.com на google.com, вам придется взять последние два блока - один для суффикса и один для google strong > .

Если вы примените эту логику к subdomain.google.co.uk, но в итоге получится co.uk.

Вам действительно нужно найти суффикс из списка, например http://publicsuffix.org/

Ответ 2

Не используйте регулярное выражение, используйте метод .split() и работайте там.

var s = domain.split('.');

Если ваш прецедент довольно узкий, вы можете затем проверить TLD по мере необходимости, а затем вернуть последние 2 или 3 сегмента:

return s.slice(-2).join('.');

Это сделает ваши глаза кровоточащими меньше, чем любое регулярное выражение.

Ответ 3

Я не проводил много испытаний на этом, но если я понимаю, о чем вы просите, это должно быть достойной отправной точкой...

([A-Za-z0-9-]+\.([A-Za-z]{3,}|[A-Za-z]{2}\.[A-Za-z]{2}|[A-za-z]{2}))\b

EDIT:

Чтобы уточнить, он ищет:

один или несколько буквенно-цифровых символов или тире, за которыми следует буквальная точка

а затем одна из трех вещей...

  • три или более альфа-символа (т.е. com/net/mil/coop и т.д.)
  • два альфа-символа, за которыми следует буквальная точка, а затем еще два альфа (т.е. co.uk)
  • два альфа-символа (например, us/uk/to и т.д.)

и в конце этого, граница слова (\ b) означает конец строки, пробел или символ без слова (в словах регулярных слов обычно есть альфа-число и подчеркивание).

Как я уже сказал, я не проводил много испытаний, но это казалось разумным прыжком. Вероятно, вам нужно попробовать и настроить его, и даже тогда маловероятно, что вы получите 100% для всех тестовых случаев. Есть такие соображения, как имена доменов Юникод и всевозможные технически обоснованные, но-вы -вероятно-не-встречные-в-дикой вещи, которые будут вызывать простое регулярное выражение, как это, но это, вероятно, будет вы на 90% + пути туда.

Ответ 4

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

(([a-z\-]+)(?:\.com|\.fr|\.co.uk))

Это будет соответствовать:

www.google.com --> google.com
www.google.co.uk --> google.co.uk
www.foo-bar.com --> foo-bar.com

В моем случае я знаю, что все соответствующие URL-адреса будут сопоставлены с использованием этого регулярного выражения.

Соберите образец набора данных и проверьте его на соответствие вашему регулярному выражению. Во время прототипирования вы можете сделать это с помощью такого инструмента https://regex101.com/r/aG9uT0/1. В процессе разработки автоматизируйте его с помощью теста script.