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

如何在JavaScript中提取URL的TLD?现有代码获取全URL问题排查

解决URL顶级域名(TLD)提取及判断逻辑问题

我来帮你搞定这两个问题:正确提取目标TLD,以及修复判断逻辑的异常。

问题分析

你的代码目前有两个核心问题:

  1. 没有对获取到的URL做解析处理,直接弹出完整链接,自然拿不到想要的TLD;
  2. search()的判断逻辑完全错误:search()返回匹配字符串的起始索引,找不到时返回-1,但在JS的布尔判断里,-1会被视为true,导致你的真假判断完全失效。

修正后的代码

$(document).on("click", "a", function(e) {
    // 阻止默认跳转,方便测试效果
    e.preventDefault();
    
    var href = $(this).attr("href");
    // 兼容绝对/相对链接,用URL对象解析域名
    const url = new URL(href, window.location.origin);
    const hostname = url.hostname;
    
    // 提取顶级域名(适配.com.uk这类多段TLD)
    const domainParts = hostname.split('.');
    let tld = '';
    if (domainParts.length >= 2) {
        // 取域名最后两段,适配单段(.com)和双段(.com.uk)TLD
        tld = '.' + domainParts.slice(-2).join('.');
    }
    
    alert(`提取到的TLD:${tld}`);
    
    // 修正判断逻辑:直接对比目标TLD
    if (tld === '.com.uk') {
        alert("This website is AUTHENTIC!");
    } else {
        alert("Not AUTHENTIC!");
    }
});

关键改进点说明

  • 用URL对象解析URL:不管是绝对链接还是相对链接,URL对象都能帮你精准提取出域名部分(hostname),避免手动拼接字符串的麻烦;
  • TLD提取逻辑:通过拆分域名成数组,取最后1-2段组成TLD,同时适配.com这类单段和.com.uk这类多段顶级域名;
  • 修复判断逻辑:直接对比提取到的TLD是否等于目标值,比用search()做索引判断更准确,彻底避免布尔值判断的坑;
  • 阻止默认跳转:添加e.preventDefault()防止点击链接后页面跳转,方便你测试弹出的结果。

额外提示

如果需要适配更多类型的多段TLD(比如.co.jp、.org.uk等),可以扩展判断逻辑,或者引入公共后缀列表(Public Suffix List)来更精准识别TLD,不过对于你的需求来说,上面的代码已经足够解决问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:51:59