如何用正则表达式正确删除URL最后一个非连续斜杠后的内容
解决URL删除最后一个非连续斜杠后内容的问题
你的问题在于当前正则会错误匹配没有后缀路径的URL(比如http://rvn01.painelstream.net:8638),把协议后的所有内容都删掉了。我们来调整正则表达式,精准实现需求:
正确的正则表达式
使用这个正则来匹配需要删除的部分,然后将匹配内容替换为空字符串即可:
/(?<!\/)\/.*$/
正则规则解释
(?<!\/):负向零宽断言,确保我们要匹配的斜杠前面不是另一个斜杠,完美满足你“斜杠前不能有紧邻的其他斜杠”的要求\/:精准匹配目标斜杠.*$:匹配该斜杠之后到URL结尾的所有内容
验证所有测试案例
我们用你的原始URL逐一验证,结果完全符合预期:
原始URL → 处理后结果
http://69.162.64.252:8692/live→http://69.162.64.252:8692http://rvn01.painelstream.net:8638→http://rvn01.painelstream.net:8638(无匹配内容,保持原样)http://2.stm-ip.com:8578/;stream.mp3→http://2.stm-ip.com:8578http://stm51.streamingbage.net.br:18164→http://stm51.streamingbage.net.br:18164(无匹配内容,保持原样)http://audio1.cmaudioevideo.com:8346/stream→http://audio1.cmaudioevideo.com:8346http://radio.radionaturezafm.com.br:9994→http://radio.radionaturezafm.com.br:9994(无匹配内容,保持原样)http://srv-stream.sisdera.com:8000/SOCIEDADECARNAVA→http://srv-stream.sisdera.com:8000http://stm1.srvaudio.com.br:9422/;type=mp3→http://stm1.srvaudio.com.br:9422https://streaming.speedrs.com.br/radio/8050/jaboticaba→https://streaming.speedrs.com.br/radio/8050http://hts03.kshost.com.br:8014/live→http://hts03.kshost.com.br:8014
原正则失效的原因
你使用的/(?:.(?!/))+$是匹配从结尾开始,每个字符后都不是斜杠的连续内容。对于没有后缀路径的URL(比如http://rvn01.painelstream.net:8638),这个正则会匹配从://之后的所有内容(因为这些字符后面都没有斜杠),替换后就只剩下http:了,这就是错误的根源。
内容的提问来源于stack exchange,提问作者Oracy Martos
相关产品推荐
相关产品推荐

