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

如何改造字符串域名数组适配正则表达式,实现精准域名匹配?

域名匹配问题解决方案

问题描述

我有一个存储域名的字符串数组:

var sites = ["site2.com", "site2.com", "site3.com"];

需要检查字符串domainName是否与数组中的某个站点匹配。最初用indexOf可以正常匹配完全一致的域名,但当domainName带有子域名(比如subpage.site1.com)时无法识别。

尝试过用some结合正则测试:

if(sites.some(function(rx) { return rx.test(domainName); })

但遇到两个问题:

  • 必须把数组元素改成正则字面量(如var sites = [/site1.com/, /site2.com/, /site3.com/];),但希望保留字符串形式方便终端用户使用;
  • 会出现误匹配,比如anothersite1.com会被判定匹配site1.com。

试过用replace和concat构造^([a-z0-9]+[.])*site1\.com$这类正则,但转义字符处理麻烦,想找更简便的实现方式。


解决方案

方案1:后缀匹配法(无正则,简单直接)

不需要用正则,直接拆分域名片段,从后往前拼接成可能的域名后缀,和数组里的域名对比。先对数组去重还能优化性能。

代码实现:

var sites = ["site2.com", "site2.com", "site3.com"];
// 去重处理,避免重复判断
const uniqueSites = [...new Set(sites)];

function isDomainMatch(domainName) {
  const domainParts = domainName.split('.');
  // 生成所有可能的后缀域名,逐一匹配
  for (let i = 0; i < domainParts.length - 1; i++) {
    const candidateDomain = domainParts.slice(i).join('.');
    if (uniqueSites.includes(candidateDomain)) {
      return true;
    }
  }
  // 最后检查是否完全匹配
  return uniqueSites.includes(domainName);
}

// 测试用例
console.log(isDomainMatch("subpage.site2.com")); // 输出 true
console.log(isDomainMatch("anothersite2.com")); // 输出 false
console.log(isDomainMatch("site3.com")); // 输出 true

方案2:正确转义的正则匹配法

如果偏好正则实现,关键是先转义域名里的特殊正则字符(比如.),再构造能匹配子域名后缀的规则,确保匹配的是完整的域名结尾部分,不会出现误匹配。

代码实现:

var sites = ["site2.com", "site2.com", "site3.com"];
const uniqueSites = [...new Set(sites)];

function isDomainMatch(domainName) {
  return uniqueSites.some(site => {
    // 转义正则特殊字符,避免语法错误或误匹配
    const escapedSite = site.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    // 构造正则:匹配域名本身,或前面带任意子域名(以.分隔)的情况
    const matchRule = new RegExp(`(^|\\.)${escapedSite}$`, 'i');
    return matchRule.test(domainName);
  });
}

// 测试用例
console.log(isDomainMatch("subpage.site2.com")); // 输出 true
console.log(isDomainMatch("anothersite2.com")); // 输出 false
console.log(isDomainMatch("SITE3.COM")); // 输出 true(忽略大小写)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:05:38