You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript正则表达式从域名列表中正确提取主域名

嘿,我太懂这种抓耳挠腮的感觉了——从一堆带前缀的域名里精准抠出主域名,用正则确实容易踩坑,尤其是碰到bbc.co.uk这种多后缀的域名时,普通正则根本hold不住。我来给你分享两个靠谱的解决方案,帮你搞定这个问题:

提取主域名的实用方案

方法一:用公共后缀列表库(强推!)

手动写正则很难覆盖所有奇葩域名场景,比如.co.uk、.com.hk这种二级公共后缀,最好直接用维护完善的工具库。这里推荐psl,它是Mozilla公共后缀列表的JS实现,能识别所有已知的后缀规则。

步骤:

  1. 先安装依赖:
npm install psl
  1. 写提取逻辑:
const psl = require('psl');

function getMainDomain(domain) {
  const parsedResult = psl.parse(domain);
  // parsedResult.domain 就是我们要的主域名,解析失败就返回原域名兜底
  return parsedResult.domain || domain;
}

// 测试几个例子看看效果:
console.log(getMainDomain('developer.mozilla.org')); // 输出 mozilla.org
console.log(getMainDomain('bbc.co.uk')); // 输出 bbc.co.uk
console.log(getMainDomain('mail.google.com.hk')); // 输出 google.com.hk

这个方法基本能搞定99%的域名场景,因为它背后是持续更新的公共后缀列表,比自己瞎写正则靠谱多了。

方法二:手动正则(适合简单场景)

如果你不想额外装库,只需要处理.com、.org、.net这种单后缀的普通域名,可以试试这个简化版正则:

function getSimpleMainDomain(domain) {
  // 匹配最后两段有效域名,忽略前面的子域名前缀
  const matchResult = domain.match(/^(?:.*\.)?([a-z0-9-]+\.[a-z]{2,6})$/i);
  return matchResult ? matchResult[1] : domain;
}

// 测试:
console.log(getSimpleMainDomain('developer.mozilla.org')); // 输出 mozilla.org
console.log(getSimpleMainDomain('blog.example.com')); // 输出 example.com

⚠️ 注意:这个正则搞不定多后缀域名,比如bbc.co.uk会被提取成co.uk,而不是正确的bbc.co.uk,所以只适合需求简单的场景。

为啥你的正则没生效?

大概率是没考虑到多后缀域名的情况,或者捕获组的写法有问题。比如如果你的正则是/\.([^.]+\.[^.]+)$/,虽然能搞定developer.mozilla.org,但碰到bbc.co.uk就会错把co.uk当成主域名。而公共后缀列表的方法能准确区分“公共后缀”和主域名部分,所以不会出错。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:57:23