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

正则表达式匹配字符串末尾指定模式之前的所有内容

匹配顶级域名前的内容:正则反转方案

嘿,这个需求其实很好解决,咱们可以通过两种常用的正则思路来实现,我给你一步步说明:

方法1:正向预查(零宽度断言)

利用你已经写好的末尾匹配模式,通过正向预查来定位它的位置,然后匹配它之前的所有内容。

最终正则表达式:

/^(.*?)(?=\.\w{2,3}(\.\w{2,3})?$)/

各部分解释:

  • ^:匹配字符串的起始位置,确保从开头开始匹配
  • .*?:非贪婪匹配任意字符(尽可能少的匹配),这样不会把末尾的域名部分也包含进来
  • (?=...):正向预查(零宽度断言),表示后面必须跟随着你定义的末尾域名模式\.\w{2,3}(\.\w{2,3})?$,但这个模式本身不会被包含在匹配结果里
  • $:确保末尾域名模式是字符串的最后部分

测试示例:

  • 输入 db.google.com → 匹配结果:db.google
  • 输入 google.co.uk → 匹配结果:google
  • 输入 test.db.google.co.uk → 匹配结果:test.db.google

方法2:捕获组提取

如果觉得断言有点难理解,也可以用捕获组的方式:把需要的内容放到第一个捕获组,后面跟着原来的末尾模式,匹配整个字符串后取捕获组的内容。

正则表达式:

/^(.*)\.\w{2,3}(\.\w{2,3})?$/

使用方式:

当你用这个正则匹配字符串后,第一个捕获组(也就是$1)就是我们需要的内容。比如在JavaScript里:

const str = "test.db.google.co.uk";
const match = str.match(/^(.*)\.\w{2,3}(\.\w{2,3})?$/);
console.log(match[1]); // 输出:test.db.google

注意点:

  • 这个方法用的是贪婪匹配.*,因为后面的末尾模式是固定的,所以贪婪匹配会自动停到末尾模式的前面,效果和非贪婪一样
  • 如果输入的字符串本身就是一个顶级域名(比如google.com),两种方法都会返回google;如果输入的是.com,则会返回空字符串,这符合逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:44:05