Capturez le domaine jusqu'aux caractères de fin $, \?, /, :
. J'ai besoin d'une regex qui capture example.com
dans tous ces cas.
example.com:3000
example.com?pass=gas
example.com/
example.com
Capturez le domaine jusqu'aux caractères de fin $, \?, /, :
. J'ai besoin d'une regex qui capture example.com
dans tous ces cas.
example.com:3000
example.com?pass=gas
example.com/
example.com
Si vous avez réellement des URL valides, cela fonctionnera :
var urls = [
'http://example.com:3000',
'http://example.com?pass=gas',
'http://example.com/',
'http://example.com'
];
for (x in urls) {
var a = document.createElement('a');
a.href = urls[x];
console.log(a.hostname);
}
//=> example.com
//=> example.com
//=> example.com
//=> example.com
Notez que l'utilisation des expressions régulières pour ce genre de choses est ridicule 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://example.com:3000/path/to/something?query=string#fragment"
a.protocol //=> http:
a.hostname //=> example.com
a.port //=> 3000
a.pathname //=> /path/to/something
a.search //=> ?query=string
a.hash //=> #fragment
a.host //=> example.com:3000
Après réflexion approfondie, j'ai consulté la documentation de Node.js et trouvé cette petite pépite : url#parse
Le code ci-dessus peut être réécrit comme suit :
var url = require('url');
var urls = [
'http://example.com:3000',
'http://example.com?pass=gas',
'http://example.com/',
'http://example.com'
];
for (x in urls) {
console.log(url.parse(urls[x]).hostname);
}
//=> example.com
//=> example.com
//=> example.com
//=> example.com
Consultez l'historique des révisions de cette publication si vous souhaitez voir comment résoudre ce problème en utilisant jsdom
et nodejs
Étant donné que vous utilisez node, il vous suffit d'utiliser la méthode url.parse()
intégrée ; vous voulez la propriété hostname
résultante :
var url=require('url');
var urls = [
'http://example.com:3000',
'http://example.com?pass=gas',
'http://example.com/',
'http://example.com'
];
urls.forEach(function(x) {
console.log(url.parse(x).hostname);
});
Un nouveau challenger est apparu. Selon la documentation de Node, 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 une façon plus actuelle.
Je recommande d'utiliser la nouvelle classe URL qui est désormais incluse dans la plupart des navigateurs.
var urls = [
'http://example.com:3000',
'http://example.com?pass=gas',
'http://example.com/',
'http://example.com'
];
urls.forEach(url => {
const u = new URL(url)
console.log(u.hostname)
})
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.