如何从JavaScript中的URL中提取主机?
捕获域直到结束字符$, \?, /, :
。 我需要一个正则expression式来捕获所有这些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
请注意,使用正则expression式这种事情是愚蠢的,当你正在使用的语言有其他内置的方法。
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
编辑#2
经过进一步考虑,我查看了Node.js文档,发现了这个小小的gem: 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
编辑#1
如果您想了解如何使用jsdom
和nodejs
来解决这个问题,请参阅本文的修订历史logging
由于您使用节点,只需使用内置的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); });
/^((?:[a-z0-9-_]+\.)*[a-z0-9-_]+\.?)(?::([0-9]+))?(.*)$/i
比赛是主机,端口,path