Capturez le domaine jusqu'à la fin des caractères $, \?, /, :
. J'ai besoin d'un regex qui capture domian.com
dans tout cela.
domain.com:3000
domain.com?pass=gas
domain.com/
domain.com
Si vous avez réellement des URL valides, cela fonctionnera:
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
Notez que l'utilisation de regex pour ce genre de choses est absurde lorsque le langage que vous utilisez a d'autres méthodes intégrées.
Autres propriétés disponibles sur les éléments 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
Après mûre réflexion, j’ai jeté un œil dans la documentation de Node.js et trouvé ce petit bijou: url#parse
Le code ci-dessus peut être réécrit comme suit:
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
Consultez l'historique de révision de ce message si vous souhaitez savoir comment résoudre ce problème à l'aide de jsdom
et nodejs
.
Puisque vous utilisez node, utilisez simplement la méthode intégrée url.parse()
; vous voulez la propriété hostname
résultante:
var url=require('url');
var urls = [
'http://domain.com:3000',
'http://domain.com?pass=gas',
'http://domain.com/',
'http://domain.com'
];
MIS À JOUR:
urls.forEach(function(x) {
console.log(url.parse(x).hostname);
});
J'utilise le noeud 10.9.0 et voici comment je le fais.
var URL = require('url')
var url = URL.parse('http://stackoverflow.com')
console.log(url.hostname)
//=> stackoverflow.com
/^((?:[a-z0-9-_]+\.)*[a-z0-9-_]+\.?)(?::([0-9]+))?(.*)$/i
les correspondances sont hôte, port, chemin
Un nouveau challenger est apparu. Selon la documentation du noeud, vous pouvez également utiliser
var url = new URL(urlString);
console.log(url.hostname);
https://nodejs.org/api/url.html#url_the_whatwg_url_api
Cela semble être un moyen plus courant.