正则表达式匹配字符串末尾指定模式之前的所有内容
匹配顶级域名前的内容:正则反转方案
嘿,这个需求其实很好解决,咱们可以通过两种常用的正则思路来实现,我给你一步步说明:
方法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
相关产品推荐
相关产品推荐

