如何修改现有正则表达式以不匹配包含连续斜杠/的URL?
正则修改方案
修改后完整正则
const reg = /^(?:https?:\/\/)[\w.-]+(?:\.[\w.-]+)+(?:\/(?!\/)[\w\-._~:?#[\]@!$&'()*+,;=./]*)?$/gm
修改逻辑
你之前尝试的规则不生效的原因:
/{1}属于默认匹配量词,仅限制当前单个/匹配,不会限制前后出现额外的/- 你写的
(?!./)语法逻辑有误,且没有规避协议头://自带的合法连续/,所以无法生效
本次调整核心修改了路径段的匹配规则:
- 把原规则中无条件匹配路径的
[/]?[\w\-._~:?#[\]@!$&'()*+,;=./]+替换为(?:\/(?!\/)[\w\-._~:?#[\]@!$&'()*+,;=./]*)? - 新增
(?!\/)负向预查,限定域名后的第一个/之后不能再紧跟另一个/,直接阻断连续斜杠的匹配 - 保留路径可选的逻辑,兼容域名后不带斜杠、带单个斜杠、带多层单斜杠分隔路径的场景
匹配验证
仍可正常匹配的合法URL
- https://google.com
- http://www.cool.com.au
- http://www.cool.com.au/ersdfs
- http://www.cool.com.au/ersdfs?dfd=dfgd@s=1
- http://www.example.com
- http://www.example.com/asdasd/asdasdasd
- http://www.example.com/
不再匹配的内容
- http://www.example.com/////
- http://www.cool.com:81/index.html asdasd
- https:google.com
- www.cool.com.au
内容的提问来源于stack exchange,提问作者Alisa Liso
相关产品推荐
相关产品推荐

