^和$在sublime中默认只锚定全文首尾,需启用多行模式(点击↩图标或加(?m)修饰符)才能匹配每行首尾。

为什么^\s*$删不干净空行,还可能破坏文件结构
根本不是正则写错了,而是\s在Sublime里会匹配换行符\n和\r,导致^\s*$实际匹配的是“整行+换行符”这一块,一替换就把上下文的换行给吞了。尤其在Windows文件末尾有\r\n时,容易让最后一行“消失”。
正确做法是显式限定字符集:
- 删真正空行(含空格/Tab):
^[ \t]*$,只认空格和Tab,避开\s跨行风险 - 删行尾空格+Tab:
[ \t]+$,别用\s+$ - 想保留换行结构?替换框留空就行,别加
\n或\r,Sublime自动维持行边界
如何让^和$匹配每行首尾,而不是全文开头结尾
Sublime默认^和$只锚定整个文本的起始和结束位置,不是每行——这点和VS Code直觉相反,新手最容易卡在这儿。
必须启用多行模式:
- 点击替换面板右下角的
↩图标(或按Alt+M) - 或在正则前加内联修饰符:
(?m)^import,这样^才匹配每一行开头 - Windows下
$常停在\r前,建议统一用\R(Sublime内置通用换行符)代替$
中文匹配失败、\b乱命中,其实是编码和单词定义问题
这不是正则语法错,而是Sublime加载文件时编码识别失败——UTF-8无BOM的文件在Windows下常被当GBK解析,中文已乱码,正则自然无效。
解决路径很明确:
- 看右下角状态栏显示的编码:如果不是
UTF-8,执行File → Save with Encoding → UTF-8 with BOM -
\b在Sublime中把_和数字也当单词字符,所以\buser\b会匹配到username;简单场景直接加空格或冒号限定,如user或user: - 要匹配中文,请用
[一-龥](覆盖常用汉字),别硬写[\u4e00-\u9fa5];\w默认不包含汉字,需确保文件已正确加载为UTF-8
全局替换时Where路径没锁住,等于裸奔改代码
在Ctrl+Shift+F里填*是最危险操作。搜log\(.*?\)替成console.log$1,可能直接卷进node_modules甚至README.md里的示例。
安全写法必须人工限定作用域:
- 精准路径:
src/**/*.js(只匹配src下所有层级的.js文件) - 排除黑名单:
!node_modules, !dist, *.ts(逗号分隔,不加空格) - 多路径组合:
components/**.vue, utils/*.js - 执行前务必点
Find All看预览列表——如果第一行就显示node_modules/axios/index.js,立刻停手
.*图标是否点亮、Where路径是否合理、Find All高亮是否精准——这三步跳过,后面Git revert的时间够重写两遍逻辑。











