27 votes

Comment extraire le nom d'hôte d'une URL en JavaScript ?

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

57voto

maček Points 25640

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

EDITION #2

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

EDITION #1

Consultez l'historique des révisions de cette publication si vous souhaitez voir comment résoudre ce problème en utilisant jsdom et nodejs

31voto

ebohlman Points 6938

É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);
});

27voto

Paul Weber Points 505

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.

6voto

Ryan Burnette Points 100

Je suis en train d'utiliser Node ^10 et voici comment j'extrais le nom d'hôte à partir d'une URL.

var url = URL.parse('https://stackoverflow.com/q/13506460/2535178')
console.log(url.hostname)
//=> stackoverflow.com

1voto

ThomasReggi Points 4025

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.com

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.

Powered by:

X