Sublime Text使用正则查找替换时无法选择性应用替换的问题咨询
问题成因
这个问题是Sublime Text build 4113版本的已知交互逻辑缺陷,和逐次查找替换模式下的光标偏移计算规则有关:
- 你使用的正则
(?<=[a-z]) *匹配的内容全部为空白字符,且绑定了小写字母的后行断言条件 - 点击「Replace」完成第一个匹配项的替换后,Sublime会默认将光标定位到替换后内容的末尾,逐次查找模式下引擎只会从光标位置往后扫描新的匹配项,此时后行断言无法匹配到光标前方的小写字母,即使全局高亮显示有匹配项,替换操作也会因为断言校验失败无法生效
- 「Replace All」是全局一次性扫描替换,不会受光标逐次偏移的影响,所以运行正常。
解决方案
以下两种方案都可以完美解决逐次选择性替换的需求:
- 修改正则为捕获组写法,替代后行断言:
查找正则写([a-z]) +,替换内容写$1,该写法逻辑和你原来的正则完全一致,但避免了后行断言和光标偏移的冲突,逐次替换可正常运行 - 保留后行断言的话,调整匹配规则为明确匹配2个及以上空白:
查找正则写(?<=[a-z])\s{2,},替换为单个空格即可,替换后剩余的单个空格不会被重复匹配,也不会触发光标偏移的bug
内容的提问来源于stack exchange,提问作者Bryton Beesley
相关产品推荐
相关产品推荐

