sublime正则模式启用需点亮右下角.*图标(蓝色),灰色即关闭;查找与替换的正则开关独立,$1仅在替换框中有效且必须用$1而非,否则原样输出。

Sublime 的正则查找不是“开了就能用”,而是“开了才可能用对”——没点亮 .* 按钮,d+、^$ 全是普通字符串,搜不到任何东西。
怎么确认正则模式真的启用了?
别信快捷键或记忆,只看查找面板右下角的 .* 图标是否高亮(蓝色/亮起)。灰色 = 关闭,写再复杂的表达式也白搭。
- Windows/Linux 快捷键
Alt+R可切换,但图标状态更可靠 -
Ctrl+F(查找)和Ctrl+H(替换)的正则开关**互相独立**:查找到了,替换框里没点.*,$1就原样输出,不会被解析 - 全局搜索
Ctrl+Shift+F同样要单独点.*,否则Where字段填了*.js也只做字面匹配
为什么 ^$ 找不到空行,d+ 总是不命中?
常见现象不是正则写错,而是边界理解偏差或隐式干扰:
-
^$确实能匹配空行,但若文件末尾有 BOM、零宽空格(u200b)或全角空格(u3000),它就失效——打开View → Characters → Show White Space能暴露这些“隐形字符” -
d+在中文环境常漏匹配:Sublime 默认用 ASCII 模式判断单词边界,d+对id:123有效,但对用户ID:123失效;改用(? 更稳 -
.默认**不匹配换行符**,想跨行抓内容(比如多行注释),得显式加(?s)前缀,或用[sS]*?
Ctrl+H 替换时,捕获组为什么总输出字面量?
这是 Sublime 最高频的翻车点:查找和替换对捕获组的引用语法完全不同。
- 查找中用
、引用捕获组(如(w+).(w+)中的) - 替换中必须用
$1、$2(写成就是输出两个字符:和1) - 想输出字面量
$?写$$;想输出字面量?写\ - 命名捕获组只支持
(?P<name>...)</name>写法,替换时用${name}(注意是花括号,不是尖括号)
性能卡死或假死?大概率是回溯爆炸
Sublime 用的是回溯正则引擎,没有超时机制。以下写法极易卡住:
-
.*if.*else.*这类松散长匹配,在千行代码里会指数级回溯 -
(a+)+或.*?x.*?y嵌套惰性量词,尤其跨行时 - 对策:用否定字符集替代
.*,比如func(([^)]+))比func(.*?)更安全;加锚定^functions+w+比function.*{更快 - 超大文件(>10MB)先人工筛选范围:
Ctrl+Shift+P → Restrict Find to Selection,再开正则
真正麻烦的从来不是语法本身,而是你不知道 Sublime 的 .* 按钮没点亮,或者没意识到 $1 和 在查找与替换中是两套规则——这两个点踩中一个,后面所有正则都白写。











