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

JavaScript URL最近匹配域名算法问题:错误匹配案例排查

问题分析

你的暴力匹配算法出错的核心原因是使用了String.includes()做字符串包含检查,而非精确的域名后缀匹配。比如xgo.google.com里的xgo包含go,导致go.google.com被误判为匹配,但实际上它并不是输入域名的合法后缀子域名。

正确的匹配逻辑应该是:目标域名必须是输入域名的完整后缀,即满足以下两个条件之一:

  • 输入域名与目标域名完全相等
  • 输入域名以 .${目标域名} 结尾
修复后的代码
const domainArr = ["google.com", "go.google.com", "pro.go.google.com"];
const pureHostName = "xgo.google.com";

// 先按域名长度降序排序,优先检查更长的域名(最近匹配)
const sortedDomains = [...domainArr].sort((a, b) => b.length - a.length);

let selectedDomain = "";
for (const domain of sortedDomains) {
    // 检查是否是完整后缀匹配
    if (pureHostName === domain || pureHostName.endsWith(`.${domain}`)) {
        selectedDomain = domain;
        break; // 找到最长匹配后直接退出循环
    }
}

console.log("selectedDomain--->", selectedDomain); // 输出google.com,符合预期
代码说明
  1. 排序处理:将域名列表按长度从长到短排序,这样一旦找到第一个符合条件的域名,就是我们需要的「最近匹配」(最长有效后缀),无需再遍历后续更短的域名。
  2. 后缀匹配逻辑:用endsWith(.${domain})确保匹配的是完整的子域名后缀,避免部分字符串匹配的错误。同时保留完全相等的判断,处理输入域名与列表中某域名完全一致的场景。
测试验证

针对所有示例场景测试,结果均符合预期:

  • hello.go.google.com → 匹配go.google.com
  • abc.hello.go.google.com → 匹配go.google.com
  • qwert.pro.go.google.com → 匹配pro.go.google.com
  • pro1.go.google.com → 匹配go.google.com
  • xyz.google.com → 匹配google.com
  • xgo.google.com → 匹配google.com(修复后的正确结果)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:10:34