parse-domain - 一个非常稳定的轻量级库
npm install parse-domain
const { fromUrl, parseDomain } = require("parse-domain");
示例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' ] }
示例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' ] }
为什么?
根据使用情况和数量,我强烈建议不要使用正则表达式或其他字符串操作方式来解决这个问题。这个问题的核心是你需要知道所有的gtld和cctld后缀,以便将URL字符串正确解析为域名和子域名,这些后缀经常更新。这是一个已解决的问题,而且不是你想自己解决的问题(除非你是谷歌或类似的公司)。除非你在紧急情况下需要主机名或域名,否则不要试图通过解析来解决这个问题。