Sublime正则搜索必须手动启用.*按钮,否则$1原样输出;删空行须用^[ ]*$避跨行风险;提取参数推荐1+防越界;全局替换需限定Where路径并预览。) ↩

Sublime 的正则搜索不是“开了.*就能用”,而是必须匹配引擎行为、避开常见陷阱,否则$1原样输出、.*?越界、s吃掉换行符都是大概率事件。
为什么$1不替换而直接显示字面量
替换框里写或\1,结果文本里真出现$1——这不是 Bug,是 Sublime 只认$1这种美元编号语法,不支持反斜杠引用。RE2 引擎(v4 默认)和旧版 Boost 都统一要求用$n。
- 查找:
console.log$$([^)]+)$$,替换填console.debug($1)才生效;填console.debug()会输出字面量 - 要输出真实
$符号,得写$$;写$会被当成未定义捕获组,可能报错或静默忽略 - 捕获组必须用英文小括号
(),[]或{}不构成分组,也产不出$1
删空行为什么不能用^s*$
s在 Sublime 中匹配
和
,所以^s*$实际会把“只有回车符”的假空行、甚至文件末尾的换行结构一起吞掉,导致保存后少一行或格式错乱。
- 真正安全的空行删除:查找
^[ ]*$(只认空格和 Tab),替换留空 - 如果还要兼容制表符,写
^[ ]*$比^s*$更可控;[ ]显式限定,不跨行、不误伤 - 想清空整行但保留换行符?替换内容绝对不要填
或,留空即可——Sublime 自动维持行结构
提取函数参数为什么([^)]+)比.*?可靠
.*?看着省事,但遇到换行、注释、嵌套括号(如fn(getUser()))就容易破界;([^)]+)明确限定“至少一个非右括号字符”,天然防贪婪、抗跨行、不误吞。
- 单行函数参数:查找
(([^)]+)),替换$1可去括号 - 含换行的函数体:先勾选
. matches newline,再查{[sS]*?},[sS]比.*?更稳 - 嵌套括号(如
map(x => x.id))无法用 Sublime 正则一步解,它不支持(?R)递归;得手动分步或用插件辅助
全局替换前必须盯住的三个地方
Ctrl+Shift+F 一按就 Replace All,等于裸奔。Sublime 不提供跨文件撤销,改错只能靠 Git 恢复。
-
Where字段别填*或留空——填.才是整个项目;精准范围写src/**/*.js, -node_modules/**, -dist/** - 每次操作前必须点
Find All,预览所有匹配项;尤其注意/* getUser(id) */这类注释是否被卷进去 - 替换后文件不会自动保存,几十个标签页变“脏状态”,得手动按
Ctrl+K Ctrl+B全部保存,右上角星号*不可信
最常被忽略的是.*图标颜色和. matches newline开关——它们不记忆状态,每次打开面板都得重点一次。三秒确认,比翻 Git 日志快得多。

















