最稳删空行正则为^[ \t]*$,需点亮.*图标启用正则、关闭. matches newline;^\s*$会误吞换行符致格式错乱,末尾空行需手动补删。

Sublime Text 的正则搜索不是“输完就能用”,^、$、\d+ 全部失效,90% 是因为没点那个 .* 图标——它默认灰色,必须手动点蓝才生效。
为什么 ^\s*$ 删不掉空行?
因为 \s 在 Sublime 中会匹配换行符 \n 和回车 \r,用它删空行可能把文件末尾的换行也吞掉,导致格式错乱甚至 Git 提交异常。
- 正确写法是
^[ \t]*$:只匹配空格和 Tab,不碰换行符 - 若需清理含全角空格或零宽字符的“伪空行”,得加 Unicode 范围,如
^[ \t\u3000\xA0]*$ - 全局替换前务必点
Find All预览,确认只圈中目标行——尤其注意最后一行是否被误删
如何安全提取括号内参数(含换行)?
用 .*? 看似简单,但遇到注释、嵌套括号或跨行函数体时极易越界匹配,比如把整个文件从第一个 ( 捕获到最末尾的 )。
- 单层括号(无嵌套):用
\(([^)]+)\),[^)]+明确排除右括号,比.*?更稳 - 支持换行:先勾选
. matches newline(或加前缀(?s)),再用\{([\s\S]*?)\}匹配最近闭合的大括号 - 嵌套括号(如
fn(a(), b())):Sublime 不支持(?R)递归,必须分步处理——先提最内层,再外层,或改用专用解析器
$1 替换后变成字面量?捕获组失效的三个硬条件
Sublime 只认语法,不支持 \1 或 $10(超过一位数的编号),且 $1 输出为空,基本逃不开这三个漏掉的环节:
-
.*图标没点蓝:正则模式未启用,所有括号都当字面量处理 - 查找框里没写带括号的捕获组:比如想提
id=123中的数字,必须写id=(\d+),不能只写id=\d+ - 跨文件替换(
Ctrl+Shift+F)时,Where路径留空或填了*:这会导致匹配范围失控,$1可能引用到非预期内容
跨文件替换总不生效?检查项目加载、路径限定、保存动作
Sublime 的全局替换是“三锁机制”:缺一不可,否则 Replace All 点了等于白点。
- 项目未加载:侧边栏没出现文件树,状态栏左下角没显示路径 → 必须
File → Open Folder…加载目录 -
Where填错:填src/**/*.js是安全的;填*或留空,node_modules和dist全被卷入,极可能破坏构建产物 - 替换后文件没变星号:Sublime 不自动保存,必须手动
File → Save All(或Ctrl+K松开 →Ctrl+B)
真正难搞的不是语法本身,而是边界模糊的场景:比如匹配 HTML 标签对、处理 JSX 中的模板字符串、或在注释和代码混排时精准跳过注释块——这些地方正则容易失焦,该让位给语法解析器或编辑器原生格式化命令。











