How to extract the host from a URL in JavaScript?
If you actually have valid URLs, this will work:
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
Note, using regex for this kind of thing is silly when the language you're using has other built-in methods.
Other properties available on A
elements.
var a = document.createElement('a');a.href = "http://domain.com:3000/path/to/something?query=string#fragment"a.protocol //=> http:a.hostname //=> domain.coma.port //=> 3000a.pathname //=> /path/to/somethinga.search //=> ?query=stringa.hash //=> #fragmenta.host //=> domain.com:3000
EDIT #2
Upon further consideration, I looked into the Node.js docs and found this little gem: url#parse
The code above can be rewritten as:
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
EDIT #1
See the revision history of this post if you'd like to see how to solve this problem using jsdom
and nodejs
Since you're using node, just use the built-in url.parse()
method; you want the resulting hostname
property:
var url=require('url');var urls = [ 'http://domain.com:3000', 'http://domain.com?pass=gas', 'http://domain.com/', 'http://domain.com'];
UPDATED:
urls.forEach(function(x) { console.log(url.parse(x).hostname);});
A new challenger has appeared. According to node docs, you can also use
var url = new URL(urlString); console.log(url.hostname);
https://nodejs.org/api/url.html#url_the_whatwg_url_api
This seems to be a more current way.