JavaScript 正则表达式 URL 仅提取域

2024-01-05

目前我可以使用以下正则表达式从任何 URL 中提取“域”:

/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n\?\=]+)/im

不过,我也得到了我想避免的子域名。例如,如果我有网站:

  • www.google.com
  • yahoo.com/某事
  • freds.meatmarket.co.uk?someparameter
  • josh.meatmarket.co.uk/asldf/asdf

我目前得到:

  • 谷歌网站
  • 雅虎网站
  • freds.meatmarket.co.uk
  • josh.meatmarket.co.uk

最后两个我想排除freds and josh子域部分并仅提取真实域meatmarket.co.uk.

我确实找到了另一个试图用PHP解决的SOF,不幸的是我不懂PHP。这可以翻译成JS吗(我实际上正在使用Google Script FYI)?

  function topDomainFromURL($url) {
    $url_parts = parse_url($url);
    $domain_parts = explode('.', $url_parts['host']);
    if (strlen(end($domain_parts)) == 2 ) { 
      // ccTLD here, get last three parts
      $top_domain_parts = array_slice($domain_parts, -3);
    } else {
      $top_domain_parts = array_slice($domain_parts, -2);
    }
    $top_domain = implode('.', $top_domain_parts);
    return $top_domain;
  }

那么,您需要从结果中删除第一个主机名,除非已经只有两部分?

只需使用与该条件匹配的正则表达式对第一次匹配的结果进行后处理即可:

function domain_from_url(url) {
    var result
    var match
    if (match = url.match(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n\?\=]+)/im)) {
        result = match[1]
        if (match = result.match(/^[^\.]+\.(.+\..+)$/)) {
            result = match[1]
        }
    }
    return result
}

console.log(domain_from_url("www.google.com"))
console.log(domain_from_url("yahoo.com/something"))
console.log(domain_from_url("freds.meatmarket.co.uk?someparameter"))
console.log(domain_from_url("josh.meatmarket.co.uk/asldf/asdf"))

// google.com
// yahoo.com
// meatmarket.co.uk
// meatmarket.co.uk
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 正则表达式 URL 仅提取域 的相关文章

随机推荐

  • Python - 如何更改按钮列表中一个按钮的颜色

    我正在尝试更改按钮的颜色 这是代码 for i in range 6 for j in range 6 if i 0 and j 0 grids6 tk Button mFrame bg blue highlightcolor black
  • 无法将 @IdClass 属性用于 @ManyToOne 关系

    我有一个Gfh i18n实体 具有复合键 IdClass Entity IdClass es caib gesma petcom data entity id Gfh i18n id class public class Gfh i18n
  • 如何设计 Spring MVC REST 服务?

    我希望客户端和服务器应用程序使用 REST 服务相互通信 我一直在尝试使用 Spring MVC 来设计它 我正在寻找这样的东西 客户端执行 POST 休息服务调用saveEmployee employeeDTO companyDTO 服务
  • 每个系统调用都会创建一个进程吗?

    每个系统调用都会创建一个进程吗 程序和操作系统的所有功能 例如中断 都是以进程的形式执行的吗 感觉这么大量的进程控制块 大量的进程调度浪费了很多资源 或者 系统调用的内核指令被视为当前的一部分 过程 简短的回答是 不完全是 但我们必须就所谓
  • Chrome 中的 HTML5 视频出现奇怪的渲染错误

    我正在尝试创建一些东西 当用户单击 HTML5 视频的微型版本时 会出现一个弹出窗口 其中显示视频的放大版本 有点像 Instagram 然而 似乎只有在 Chrome 中才会出现一个奇怪的错误 当我退出弹出窗口并通过单击毯子反复重新打开它
  • 如何检查数组是否已经排序

    那么如何做出这样的逻辑 int arr 2 5 3 if arr is sorted else Array sort 方法无效是很糟糕的 您不需要对数组进行排序来检查它是否已排序 循环遍历每对连续的元素并检查第一个元素是否小于第二个元素 如
  • 限制非管理员许可用户创建 PowerApps 环境的选项

    有什么方法可以限制许可用户创建环境吗 根据微软文档 拥有PowerApps或Flow P2许可证的用户可以进入管理中心并为其创建环境 此外 拥有社区计划许可证的用户还可以创建一个开发人员环境 但我们希望用户创建画布和模型驱动的应用程序以及
  • 如何让 jQueryUI 对话框动态加载内容

    我喜欢 jQueryUI 的对话框 但是 似乎没有一种方法可以动态加载内置内容 我想我必须使用其他方法来实现这一目标 iframe 仅在可见时才加载内容吗 这是正确的方法吗 如果其他对话框机制更适合仅在首次打开时加载内容 我愿意接受 这并不
  • 将 PySpark 数组列乘以标量

    我正在尝试将数组类型列乘以标量 该标量也是来自同一 PySpark 数据帧的值 例如 我有这个数据框 df sc parallelize 1 2 3 toDF l factor l factor 1 2 3 我想要实现的是 l factor
  • XMonad:有没有办法绑定同时触发的键和弦?

    Is there a way to make simultaneous key presses into a keybinding e g for the keys w e f when pressed within 0 05 second
  • 检测 CKEditor 5 中文本何时发生更改并且编辑器失去焦点

    我正在尝试在 CKEditor 5 中实现自动保存功能 只有在进行更改且编辑器失去焦点后才会进行保存 我怎么能这样做呢 该文档让我非常困惑 这是我得到的最接近的 function onChange el editor editor docu
  • 如何隐藏 dired 中的链接数量?

    99 9 的情况下 我并不关心有多少链接指向一个文件 如何让 dired 或者 ls 不显示链接数量 作为参考 ls l 的输出类似于 rw rw rw 1 root dir 104 Dec 25 19 32 file 在本例中 链接数为
  • PL/SQL 触发器从一张表上的 INSERT 更新另一张表

    我正在使用 SQL 和 Oracle 数据库 需要一些帮助 触发器是我很难理解的东西 当我向表 A 中插入一行时 我需要一个触发器 以便它更新表 B 上的行 特别是其主键与刚刚添加到表 A 的行的相应外键匹配的行 例如 表 A 中的 X 列
  • Carrierwave、雾、Amazon S3、Rails 4

    我正在尝试让 Carrierwave 与我的 Amazon S3 存储桶配合使用 但我的运气有点差 在我的config initializers文件夹 我有一个名为 carrierwave rb 该文件包含以下内容 CarrierWave
  • AngularJS 智能感知不适用于 Visual Studio 2015

    根据这个post http blogs msdn com b visualstudio archive 2015 02 05 using angularjs in visual studio 2013 aspxintellisense 也应
  • 如何将库安装到 Azure Web App 上的“antenv”venv?

    我正在尝试使用 FTP 将 Flask 应用程序部署到 Azure Web 应用程序 Linux python3 7 运行时 我复制了 application py 和 requirements txt 但我可以在日志中看到没有安装任何内容
  • SharedPreferences.getStringSet() 未找到?

    我对 SharedPreference 有一些不明白的地方 In 这个文件 http developer android com reference android content SharedPreferences html它说 API
  • 使用带有 lxml 前缀的 fromstring()

    我有一个变量 ele 我试图将一个子节点附加到 ele 上 该节点的标签中包含名称空间前缀 称为 style ele 似乎知道这个前缀 如以下行 print ele nsmap style outputs urn oasis names t
  • 在哪里可以找到 SimpleITK 文档和参考信息?

    我有兴趣尝试使用 SimpleITK 来解决我的成像问题 您能告诉我文档和培训材料在哪里吗 SimpleITK 已记录here http www itk org SimpleITKDoxygen html annotated html 并且
  • JavaScript 正则表达式 URL 仅提取域

    目前我可以使用以下正则表达式从任何 URL 中提取 域 https n www n im 不过 我也得到了我想避免的子域名 例如 如果我有网站 www google com yahoo com 某事 freds meatmarket co