正则匹配.watch/.video结尾域名无法排除fb.watch怎么解决
问题根源
你当前正则无法排除fb.watch的核心原因是负向先行断言的匹配逻辑和位置错误。先行断言只会检查当前位置往后的内容,当你匹配.watch后缀时,当前位置已经在fb和.watch的分界点,往后只能看到.watch,不可能匹配到fb.前缀,所以这条排除规则永远不会生效。
修复方案
场景1:从文本中提取符合要求的域名后缀(匹配原使用场景)
修复后的正则:
(?<!fb\.)(?!lecture\b)\b(\.video|\.watch)
规则说明:
- 新增
(?<!fb\.)负向后行断言,检查.video/.watch的前面是否跟着fb.,如果是就直接排除,完美命中fb.watch的过滤需求 - 保留原有
.videolecture过滤逻辑,调整为(?!lecture\b)确保.video后缀后不会紧跟lecture,过滤效果和你之前的规则完全一致
场景2:校验完整输入的域名是否符合要求
如果你的使用场景是校验用户输入的完整域名是否符合规则,使用以下正则:
^(?!.*\.videolecture)(?!^fb\.watch$).*(\.video|\.watch)$
规则说明:
- 开头两个负向先行断言分别排除包含
.videolecture的域名、以及完全等于fb.watch的特定域名 - 结尾匹配
.video或.watch后缀,确保域名符合后缀要求
内容的提问来源于stack exchange,提问作者user16779258
相关产品推荐
相关产品推荐

