需要正则表达式来捕获二级域 (SLD)

bsk*_*ard 1 javascript regex

我需要一个正则表达式来捕获给定的 URL SLD。

例子:

jack.bop.com -> bop
bop.com -> bop
bop.de -> bop
bop.co.uk -> bop
bop.com.br -> bop
Run Code Online (Sandbox Code Playgroud)

所有波普:)。因此,此正则表达式需要忽略 ccTLD、gTLDccSLD。后者是困难的部分,因为我想让正则表达式尽可能不复杂。

第一个任务是删除 ccTLD,然后删除 gTLD,然后检查 ccSLD 并删除它们(如果存在)。

任何帮助深表感谢 :)

--

如果有帮助,ccTLD 会通过以下方式进行匹配:

\.([a-z]{2})$
Run Code Online (Sandbox Code Playgroud)

gTLD 的匹配方式是:

\.([a-z]{3-6})$
Run Code Online (Sandbox Code Playgroud)

幸运的是,这是两种互斥的模式。

Lau*_*ves 5

从技术上讲,“.co.uk”是“bop.co.uk”中的二级域名。您似乎要求的是向公共注册开放的域名的最高级别部分,并且您想要剥离注册商的域名。

\n

RFC 6265 \xc2\xa75.3调用您不想要“公共后缀”的后缀:

\n
\n

“公共后缀”是由公共注册表控制的域,例如“com”、“co.uk”和“pvt.k12.wy.us”。

\n
\n

Mozilla 维护着一份所有已知公共后缀的列表

\n

要创建正则表达式,您必须枚举所有公共后缀。您应该对它们进行排序,使得作为其他元素后缀的元素稍后出现。一个简单的方法是按长度降序排序。看起来颠倒 Mozilla 的列表也足够了。

\n

之后,正则表达式非常简单:

\n
(.+\\.)?([^.]+)\\.(?:<suffixes>)$\n
Run Code Online (Sandbox Code Playgroud)\n

<suffixes>分隔的后缀列表在哪里|。它的一部分看起来像这样:

\n
gov\\.uk|ac\\.uk|co\\.uk|com|org|net|us|uk\n
Run Code Online (Sandbox Code Playgroud)\n

有一些方法可以通过折叠通用后缀来缩短这个时间,尽管这会使正则表达式(以及计算它的过程)变得更加复杂。例如:

\n
(?:gov\\.|ac\\.|co\\.|)uk|com|org|net|us\n
Run Code Online (Sandbox Code Playgroud)\n