Регулярное выражение для простого домена

Я пытаюсь сопоставить простой домен: example.com

Но все его комбинации.

Как я могу это сделать:

https://example.com
http://www.example.com
etc.

Ответ 1

^https?://([\w\d]+\.)?example\.com$

с использованием кода:

var result = /^https?:\/\/([a-zA-Z\d-]+\.){0,}example\.com$/.test('https://example.com');
// result is either true of false

Я улучшил его, чтобы он соответствовал "http://a.b.example.com"

Ответ 2

Более общий пример, который я использовал:

/http(?:s)?:\/\/(?:[\w-]+\.)*([\w-]{1,63})(?:\.(?:\w{3}|\w{2}))(?:$|\/)/i

Обратите внимание, что это решение не подбирает правильную метку для TLD с 5 символами. Пример:

http://mylabel.co.uk

Будет выбран как "co" вместо "mylabel", но

http://mylabel.co

будет правильно сопоставлен как "mylabel". Регулярное выражение было достаточно хорошим для меня даже с этим ограничением.

Обратите внимание, что предел 63 символов для метки является спецификацией RFC. Надеюсь, это поможет любому, кто ищет тот же ответ в будущем.

Ответ 3

Возможно, вы можете использовать только совпадение с доменным именем в URL-адресе:

/^(?:http(?:s)?:\/\/)?(?:[^\.]+\.)?example\.com$/

Он будет соответствовать любой из следующих строк:

https://example.com
http://www.example.com
http://example.com
https://example.com
www.example.com
example.com

UPDATE:. Чтобы полностью использовать URL-адрес (а не только часть имени домена):

/^(?:http(?:s)?:\/\/)?(?:[^\.]+\.)?example\.com(?:/.*)?$/

Ответ 4

Следующие работы в Java,

^(http:|https:|)[/][/]([^/]+[.])*example.com$

и соответствует вашим тестовым примерам, а не соответствует, например,

http://www.google.com/http://example.com