parse-domain - uma biblioteca leve muito sólida
npm install parse-domain
const { fromUrl, parseDomain } = require("parse-domain");
Exemplo 1
parseDomain(fromUrl("http://www.example.com/12xy45"))
{ type: 'LISTED',
hostname: 'www.example.com',
labels: [ 'www', 'example', 'com' ],
icann:
{ subDomains: [ 'www' ],
domain: 'example',
topLevelDomains: [ 'com' ] },
subDomains: [ 'www' ],
domain: 'example',
topLevelDomains: [ 'com' ] }
Exemplo 2
parseDomain(fromUrl("http://subsub.sub.test.ExAmPlE.coM/12xy45"))
{ type: 'LISTED',
hostname: 'subsub.sub.test.example.com',
labels: [ 'subsub', 'sub', 'test', 'example', 'com' ],
icann:
{ subDomains: [ 'subsub', 'sub', 'test' ],
domain: 'example',
topLevelDomains: [ 'com' ] },
subDomains: [ 'subsub', 'sub', 'test' ],
domain: 'example',
topLevelDomains: [ 'com' ] }
Por quê?
Dependendo do caso de uso e do volume, recomendo fortemente que você não resolva esse problema usando regex ou outros meios de manipulação de cadeia. O principal desse problema é que você precisa conhecer todos os sufixos gtld e cctld para analisar adequadamente as seqüências de URL em domínio e subdomínios; esses sufixos são atualizados regularmente. Este é um problema resolvido e não o que você deseja resolver (a menos que você seja o Google ou algo assim). A menos que você precise do nome do host ou do domínio em uma pitada, não tente analisar esse caminho.
url.split('/')[2]
Desde independentemente do que escreverftp
,ftps
,https
, o nome de domínio será sempre no índice 2.