Splits a URL into sub-domain, domain and the effective top-level domain.
Since domains are handled differently across different countries and organizations, splitting a URL into sub-domain, domain and top-level-domain parts is not a simple regexp. parse-domain uses a large list of effective tld names from publicsuffix.org to recognize different parts of the domain.
Please also read the note on effective top-level domains.
npm install --save parse-domain// long subdomains can be handledexpect(parseDomain("some.subdomain.example.co.uk")).to.eql({subdomain: "some.subdomain",domain: "example",tld: "co.uk"});// usernames, passwords and ports are disregardedexpect(parseDomain("https://user:password@example.co.uk:8080/some/path?and&query#hash")).to.eql({subdomain: "",domain: "example",tld: "co.uk"});// non-canonical top-level domains are ignoredexpect(parseDomain("unknown.tld.kk")).to.equal(null);// invalid urls are also ignoredexpect(parseDomain("invalid url")).to.equal(null);expect(parseDomain({})).to.equal(null);// custom top-level domains can optionally be specifiedexpect(parseDomain("mymachine.local",{customTlds: ["local"]})).to.eql({subdomain: "",domain: "mymachine",tld: "local"});// custom regexps can optionally be specified (instead of customTlds)expect(parseDomain("localhost",{customTlds:/localhost|\.local/})).to.eql({subdomain: "",domain: "",tld: "localhost"});It can sometimes be helpful to apply the customTlds argument using a helper function
functionparseLocalDomains(url){varoptions={customTlds: /localhost|\.local/};returnparseDomain(url,options);}expect(parseLocalDomains("localhost")).to.eql({subdomain: "",domain: "",tld: "localhost"});expect(parseLocalDomains("mymachine.local")).to.eql({subdomain: "",domain: "mymachine",tld: "local"});Returns null if url has an unknown tld or if it's not a valid url.
{
customTlds: RegExp|String[]}{tld: String,domain: String,subdomain: String}Technically, the top-level domain is always the part after the last dot. That's why publicsuffix.org is a list of effective top-level domains: It lists all top-level domains where users are allowed to host any content. That's why foo.blogspot.com will be split into
{tld: "blogspot.com",domain: "foo",subdomain: ""}See also #4
Unlicense