Захват домена до конечных символов $, \?, /, :
. Мне нужно регулярное выражение, которое захватывает domian.com
во всех этих случаях.
domain.com:3000
domain.com?pass=gas
domain.com/
domain.com
Захват домена до конечных символов $, \?, /, :
. Мне нужно регулярное выражение, которое захватывает domian.com
во всех этих случаях.
domain.com:3000
domain.com?pass=gas
domain.com/
domain.com
Если у вас действительно есть действительные URL-адреса, это будет работать:
var urls = [
'http://domain.com:3000',
'http://domain.com?pass=gas',
'http://domain.com/',
'http://domain.com'
];
for (x in urls) {
var a = document.createElement('a');
a.href = urls[x];
console.log(a.hostname);
}
//=> domain.com
//=> domain.com
//=> domain.com
//=> domain.com
Примечание. Использование регулярного выражения для такого рода вещей глупо, когда язык, который вы используете, имеет другие встроенные методы.
Другие свойства доступны в A
элементах.
var a = document.createElement('a');
a.href = "http://domain.com:3000/path/to/something?query=string#fragment"
a.protocol //=> http:
a.hostname //=> domain.com
a.port //=> 3000
a.pathname //=> /path/to/something
a.search //=> ?query=string
a.hash //=> #fragment
a.host //=> domain.com:3000
При дальнейшем рассмотрении я просмотрел документы Node.js и нашел этот маленький драгоценный камень: url#parse
Приведенный выше код можно переписать как:
var url = require('url');
var urls = [
'http://domain.com:3000',
'http://domain.com?pass=gas',
'http://domain.com/',
'http://domain.com'
];
for (x in urls) {
console.log(url.parse(urls[x]).hostname);
}
//=> domain.com
//=> domain.com
//=> domain.com
//=> domain.com
См. историю изменений этого сообщения, если вы хотите увидеть, как решить эту проблему, используя jsdom
и nodejs
Поскольку вы используете node, просто используйте встроенный метод url.parse()
; вы хотите получить свойство hostname
:
var url=require('url');
var urls = [
'http://domain.com:3000',
'http://domain.com?pass=gas',
'http://domain.com/',
'http://domain.com'
];
ОБНОВЛЕНО:
urls.forEach(function(x) {
console.log(url.parse(x).hostname);
});
Я использую Node ^10
и вот как я извлекаю имя хоста из URL.
var url = URL.parse('https://stackoverflow.com/q/13506460/2535178')
console.log(url.hostname)
//=> stackoverflow.com
/^((?:[a-z0-9-_]+\.)*[a-z0-9-_]+\.?)(?::([0-9]+))?(.*)$/i
соответствуют хост, порт, путь
Новый претендент появился. В соответствии с документами узла, вы также можете использовать
var url = new URL(urlString);
console.log(url.hostname);
https://nodejs.org/api/url.html#url_the_whatwg_url_api
Это, кажется, более актуальный способ.