正则表达式提取服务器地址及剩余内容匹配失败求助
解决正则表达式捕获服务器地址的问题
哦,我明白你碰到的问题了——贪婪匹配在这儿捣乱呢!你之前写的正则里,.+是贪婪模式,它会尽可能多地匹配字符,直到遇到最后一个/或?才停下,这就导致域名后面的/path也被塞进g2里了,完全不符合你的预期。
正确的正则表达式方案
推荐使用否定字符类来精准匹配到第一个/或?为止,这种方式比非贪婪匹配更高效:
/(https?:\/\/)([^\/?]+)([\/?].*)/
正则各部分解释
(https?:\/\/):捕获协议部分(http://或https://),对应分组g1([^\/?]+):捕获服务器地址,[^\/?]表示匹配任何不是/或?的字符,+表示匹配1次或多次,这样会精准停在第一个/或?之前,对应分组g2([\/?].*):捕获剩余的所有内容,以/或?开头,.*匹配后续任意字符,对应分组g3
验证示例
对于输入http://something.com/path?query=hello/goodbye,匹配结果完全符合你的需求:
- g1:
http:// - g2:
something.com - g3:
/path?query=hello/goodbye
兼容无后续内容的情况
如果需要兼容只有服务器地址的URL(比如http://something.com),可以把第三个分组设为可选:
/(https?:\/\/)([^\/?]+)([\/?].*)?/
这样当没有后续内容时,g3会匹配为空字符串,不会出现匹配失败的情况。
内容的提问来源于stack exchange,提问作者user4893295
相关产品推荐
相关产品推荐

