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

如何用正则表达式从URL中提取含单个连字符的指定格式域名?

正则表达式修改建议

核心问题分析

你当前的正则(?<=.)[a-zA-Z0-9]+-[a-zA-Z0-9-_]+存在两个关键问题:

  1. 未限制仅允许单个连字符,会误匹配含多个连字符的域名(比如www.florida-miami-dade.com)
  2. 包含下划线匹配规则(_),但标准域名通常不允许下划线,且你的需求案例中也未涉及

解决方案

根据你的需求,需要确保目标域名恰好包含一个连字符,同时匹配合法的域名结构(字母、数字、点、单个连字符)。以下分两种场景给出正则:

场景1:直接匹配独立域名字符串

如果你输入的是单独的域名(如www.miami-dade.com),使用这个正则:

^(?![^-]*-[^-]*-)[a-zA-Z0-9.]+-[a-zA-Z0-9.]+$
  • ^ 和 $:限定匹配整个字符串,避免部分匹配
  • (?![^-]*-[^-]*-):负向预查,确保字符串中不会出现第二个连字符
  • [a-zA-Z0-9.]+-[a-zA-Z0-9.]+:匹配包含单个连字符的合法域名结构

场景2:从完整URL中提取域名

如果需要从带协议的URL(如https://www.miami-dade.com/path)中提取,使用这个正则:

(?:https?://)?(?![^/]*-[^/]*-)([a-zA-Z0-9.]+-[a-zA-Z0-9.]+)(?=/|$)
  • (?:https?://)?:可选匹配http/https协议,不捕获该部分
  • (?![^/]*-[^/]*-):确保从当前位置到第一个斜杠/字符串结尾之间,只有一个连字符
  • ([a-zA-Z0-9.]+-[a-zA-Z0-9.]+):捕获符合要求的域名部分
  • (?=/|$):确保域名后是路径分隔符或URL结尾,避免误匹配路径内容

测试验证

  • 匹配成功:www.miami-dade.com、miami-dade.gov、sub.miami-dade.co.uk
  • 匹配失败:www.miamidade.com(无连字符)、www.florida-miami-dade.com(多个连字符)、miami--dade.com(连续连字符)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:31:13