# parse-domain
**Repository Path**: mirrors_alsotang/parse-domain
## Basic Information
- **Project Name**: parse-domain
- **Description**: Splits an url into sub-domain, domain and effective top-level-domain
- **Primary Language**: Unknown
- **License**: Unlicense
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-11-23
- **Last Updated**: 2026-05-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
parse-domain
============
**Splits a URL into sub-domain, domain and the effective top-level domain.**
[](https://www.npmjs.com/package/parse-domain)
[](https://www.npmjs.com/package/parse-domain)
[](https://david-dm.org/peerigon/parse-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](http://publicsuffix.org/list/effective_tld_names.dat) from publicsuffix.org to recognize different parts of the domain.
Please also read the note on [effective top-level domains](#note-on-effective-top-level-domains).
Installation
------------------------------------------------------------------------
```sh
npm install --save parse-domain
```
Usage
------------------------------------------------------------------------
```javascript
// long subdomains can be handled
expect(parseDomain("some.subdomain.example.co.uk")).to.eql({
subdomain: "some.subdomain",
domain: "example",
tld: "co.uk"
});
// usernames, passwords and ports are disregarded
expect(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 ignored
expect(parseDomain("unknown.tld.kk")).to.equal(null);
// invalid urls are also ignored
expect(parseDomain("invalid url")).to.equal(null);
expect(parseDomain({})).to.equal(null);
```
### Introducing custom tlds
```javascript
// custom top-level domains can optionally be specified
expect(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
```javascript
function parseLocalDomains(url) {
var options = {
customTlds: /localhost|\.local/
};
return parseDomain(url, options);
}
expect(parseLocalDomains("localhost")).to.eql({
subdomain: "",
domain: "",
tld: "localhost"
});
expect(parseLocalDomains("mymachine.local")).to.eql({
subdomain: "",
domain: "mymachine",
tld: "local"
});
```
API
------------------------------------------------------------------------
### `parseDomain(url: String, options: ParseOptions): ParsedDomain|null`
Returns `null` if `url` has an unknown tld or if it's not a valid url.
#### `ParseOptions`
```javascript
{
customTlds: RegExp|String[],
icann: Boolean, // see bottom `Note on effective top-level domains`
}
```
#### `ParsedDomain`
```javascript
{
tld: String,
domain: String,
subdomain: String
}
```
Note on effective top-level domains
------------------------------------------------------------------------
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
```javascript
{
tld: "blogspot.com",
domain: "foo",
subdomain: ""
}
```
See also [#4](https://github.com/peerigon/parse-domain/issues/4)
If you only want icann tlds, just set `icann` options to `true`
License
------------------------------------------------------------------------
Unlicense