Ответ 1
Ваше регулярное выражение не кажется правильным. Попробуйте это регулярное выражение:
/^(?:https?:\/\/)?(?:[^@\n][email protected])?(?:www\.)?([^:\/\n?]+)/img
Я пытаюсь сформировать регулярное выражение (javascript/ node.js), которое будет извлекать часть поддомена и домена из любого заданного URL-адреса. Это то, с чем я столкнулся:
[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)
Прямо сейчас, я просто рассматриваю http, https для протокола и исключаю "www". часть из участка субдомена + домена URL. Я проверил выражение, и оно почти работает. Но вот проблема:
Успех
'http://mplay.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)
'http://lplay.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)
Отказ
'http://play.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)
'http://tplay.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)
Я просто использую первый элемент из массива результатов. Я не могу понять, почему "играть". и "tplay". не работает. Может ли кто-нибудь помочь мне в этом отношении?
Имеет ли значение "/p" и "/t" значение для оценщика регулярных выражений?
Есть ли другой способ извлечения поддомена и домена из любого заданного URL с использованием регулярного выражения?
Изменить -
Пример:
https://play.google.com/store/apps/details?id=com.skgames.trafficracer = > play.google.com
https://mail.google.com/mail/u/0/#inbox = > mail.google.com
Ваше регулярное выражение не кажется правильным. Попробуйте это регулярное выражение:
/^(?:https?:\/\/)?(?:[^@\n][email protected])?(?:www\.)?([^:\/\n?]+)/img
Вы примерно один миллионный человек, который пытается проанализировать URL-адреса в JavaScript. Я немного удивлен, что вы не видели ни одного из существующих вопросов о SO, датируемых годами. Последнее, что вы хотите сделать, это написать еще одно неправильное регулярное выражение со всем уважением к тем, кто дал ответы на ваш вопрос.
Есть много хорошо документированных библиотек и подходов к решению этой проблемы. Погугли это. Самый простой способ заключается в создании a
элемент памяти, присвоить ему href
, а затем получить доступ к его hostname
и другие свойства. Смотрите http://tutorialzine.com/2013/07/quick-tip-parse-urls/. Если это не помогает вашей лодке, используйте библиотеку вроде uri.j s.
Если вы действительно не хотите использовать библиотеку и настаиваете на изобретении велосипеда, то, по крайней мере, сделайте что-то вроде следующего:
function get_domain_from_url(url) {
var a = document.createElement('a').
a.setAttribute('href', url);
return a.hostname;
}
По сути, вы делегируете извлечение части URL домена/домена в логику разбора URL браузера, что НАМНОГО лучше, чем все, что вы когда-либо будете писать.
Также см. Разбор URL с помощью jquery/javascript? , Разбор URL с Javascript, Как мне разобрать URL в имя хоста и путь в JavaScript? или проанализируйте URL с помощью JavaScript или jQuery. Как ты скучал по этим? Извините, я должен проголосовать, чтобы закрыть это как дубликат.
Тот же RegExp, что и в anubhava's
, только добавлена поддержка относящихся к протоколу URL, таких как //google.com
:
/^(?:https?:)?(?:\/\/)?(?:[^@\n][email protected])?(?:www\.)?([^:\/\n]+)/im
Здесь решение игнорирует все до ://
.*\://?([^\/]+)
Если вы хотите игнорировать www.
.*\://(?:www.)?([^\/]+)
Ваше выражение регулярного выражения работает очень хорошо. Вам нужно только снять скобки. Окончательное выражение:
^(?:http:\/\/|www\.|https:\/\/)([^\/]+)
Надеюсь, это полезно!