Sublime正则需手动启用.图标,否则^/$等无效;删空行用^[ \t]*$更安全,避免\s吞换行符致Git异常;跨行匹配应优先用[\s\S]而非.,捕获组替换需确保正则开启、括号正确且跨文件路径精准。

Sublime 的正则不是“输完回车就生效”,90% 的失败都卡在没点那个 .* 图标——它默认灰色,必须手动点蓝才进入正则模式。
为什么 ^ 和 $ 总是不匹配行首行尾?
因为 Sublime 默认启用多行模式,但 ^/$ 在 Windows 粘贴文本(含 \r\n)或中文界面下,常被换行符识别逻辑干扰,导致锚点失效。
- 先按
Ctrl+Shift+P输入Set Syntax: Plain Text,切回纯文本模式,排除语法高亮插件干扰 - 在查找框里显式兼容
\r?:比如想删以#开头的注释行,写成^#\r?而非^# - 右下角点击当前换行符标识(如显示
Windows (CRLF)),切换为Unix (LF)再试——这是最稳的锚点对齐方式
删空行用 ^\s*$ 为什么会导致 Git 提交异常?
\s 在 Sublime 中会匹配 \n 和 \r,直接用它删空行,可能把文件末尾的换行符也吞掉,破坏 POSIX 文件格式规范。
- 最稳写法是
^[ \t]*$:只匹配空格和 Tab,完全避开换行符 - 若需清理含全角空格(
\u3000)或不间断空格(\u00A0)的“伪空行”,改用^[ \t\u3000\u00A0]*$ - 执行前务必点
Find All(Alt+Enter)预览,尤其检查最后一行是否被误删——末尾空行得手动补一个换行符
跨行匹配时 .* 为什么总断在第一行?
. 默认不匹配换行符,所以 /\*\*.*\*/ 这类写法对多行注释完全无效。
- 正确做法是用
[\s\S]:它等于“所有字符”,因为\s包含换行符,\S包含非空白字符,二者并集覆盖全部 - 匹配 JSDoc 块应写成
/\*\*[\s\S]*?\*/,注意加?变懒惰,避免越界捕获到下一个*/ - 勾选
. matches newline(点右下角.按钮或按Alt+R)也能让.生效,但该选项会影响所有后续匹配逻辑,容易误伤,不如显式用[\s\S]精准可控
捕获组 $1 替换后变字面量,哪里漏了?
三个硬条件缺一不可,否则 $1 就是普通两个字符:
-
.*图标没点蓝:正则模式未启用,括号全当字面量处理 - 查找框里没写带括号的捕获组:比如想提
id=123中的数字,必须写id=(\d+),不能只写id=\d+ - 跨文件替换(
Ctrl+Shift+F)时,Where路径留空或填了*:这会让匹配范围失控,$1可能引用到非预期文件里的内容
真正难搞的不是语法本身,而是边界模糊的场景:比如匹配 HTML 标签对、处理 JSX 中的模板字符串、或在注释和代码混排时精准跳过注释块——这些地方正则容易失焦,该让位给语法解析器或编辑器原生格式化命令。

















