You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

使用JavaScript提取URL主域名的通用方案问询

通用URL主域名提取方案(适配单/多后缀域名)

这个问题我之前踩过不少坑——手动写正则确实很难兼顾单段顶级域名(比如.com)和多段公共后缀(比如.co.uk.github.io)的情况,因为公共后缀的规则太复杂了,靠硬编码正则根本覆盖不全。最靠谱的方法是基于**公共后缀列表(Public Suffix List)**来实现,这个列表由Mozilla维护,包含了所有合法的公共后缀,能准确区分主域名和后缀部分。

推荐方案:用成熟的第三方库处理

以Python为例,tldextract库就是专门干这个的,它会自动下载并更新公共后缀列表,完美适配各种域名场景:

  1. 先安装库:
pip install tldextract
  1. 代码示例:
import tldextract

def get_main_domain(url):
    extracted = tldextract.extract(url)
    # 拼接主域名:二级域名 + 公共后缀
    return f"{extracted.domain}.{extracted.suffix}"

# 测试各种场景
test_urls = [
    "https://www.google.co.uk/search?q=test",
    "https://blog.github.io/posts/2024/",
    "https://example.com",
    "https://sub.sub.example.cn",
    "ftp://ftp.microsoft.com"
]

for url in test_urls:
    print(f"URL: {url} → 主域名: {get_main_domain(url)}")

输出结果:

URL: https://www.google.co.uk/search?q=test → 主域名: google.co.uk
URL: https://blog.github.io/posts/2024/ → 主域名: github.io
URL: https://example.com → 主域名: example.com
URL: https://sub.sub.example.cn → 主域名: example.cn
URL: ftp://ftp.microsoft.com → 主域名: microsoft.com

为什么不推荐手动写正则?

举个反例:如果用简单正则r'https?://(?:www\.)?([^/]+)'提取,然后再拆分,碰到google.co.uk会把co.uk当成主域名的一部分,完全错误。而且公共后缀一直在更新(比如新的顶级域名.xyz.dev,还有像.github.io这种平台级后缀),手动维护正则成本极高,根本追不上变化。

如果你不想用第三方库(不推荐)

如果必须自己实现,步骤大概是:

  • 下载最新的公共后缀列表
  • 解析列表中的规则(比如带*的通配符规则、带!的例外规则)
  • 对URL的域名部分从右往左匹配最长的公共后缀,剩下的部分加后缀就是主域名

但这个过程很繁琐,还要处理各种规则例外,不如直接用现成的库省心。

内容的提问来源于stack exchange,提问作者None

火山引擎 最新活动