sublime中^和$不匹配行首行尾因默认多行模式下仅锚定全文起止,且windows的\r\n换行符及中文插件干扰识别;需切纯文本模式、显式兼容\r\n、统一换行格式。

为什么^和$在Sublime里不匹配行首行尾
因为Sublime默认启用多行模式(Multiline),但^和$只锚定整个文本的起止,而非每行——尤其在Windows粘贴来的文本中,\r\n换行符会让^根本找不到“行首”。中文界面插件还可能干扰换行符识别,导致正则看似写对了却没反应。
实操建议:
- 先按
Ctrl+Shift+P输入Set Syntax: Plain Text,切回纯文本模式,排除语法高亮插件干扰 - 查找时显式兼容
\r\n:比如想匹配行首的#,别写^#,改用^#\r? - 右下角点击换行符标识(如显示
Windows (CRLF)),手动切为Unix (LF)再试,这是最稳的解法
提取手机号、邮箱等字段时总抓错内容
直接用\d{11}会把身份证号、订单号全卷进来;依赖\b在中文混排里基本失效——Sublime的词边界对全角标点和中文字符不可靠。
实操建议:
- 手机号推荐:
(?,前后用负向断言<code>(?和<code>(?!\d)确保独立成项 - 邮箱用:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,},别加\b,它在中文环境里容易漏匹配 - 提取后立刻按
Ctrl+Shift+P→Convert Case to: Lowercase,避免后续去重因大小写不一致失败
复制出来的结果带多余空格或跨行混乱
Find All后复制,默认只选中匹配片段本身,不带上下文;但如果正则没写捕获组,复制出来的是整段匹配(含fetch(前缀);更麻烦的是,\s在中文界面下完全不匹配全角空格(\u3000)、不间断空格(\u00A0)等,导致清洗断裂。
实操建议:
- 想只取关键部分,正则必须用
()包住目标:例如fetch\s*\(\s*["']([^"']*)["']\s*\),复制后得到的是纯净URL列表 - 清理混合空白:用正则
[ \t\r\f\v\u3000\u00A0\u2000-\u200B\u2028\u2029]+替换为单个半角空格 - 若需保留段落空行,改成
[ \t\r\f\v\u3000\u00A0\u2000-\u200B\u2028\u2029]+(?=\S),只清理后面紧跟文字的空白块
跨文件批量提取关键词后结果乱成一团
Find in Files(Ctrl+Shift+F)的结果页是“文件名 + 行号 + 匹配行”的混合格式,直接Ctrl+A复制会带大量噪音;而且它不支持$1引用捕获组,无法像单文件替换那样直接输出干净字段。
实操建议:
- 搜索时仍用捕获组,例如
console\.log\(\s*["']([^"']*)["']\s*\),但别指望结果页自动提取——复制后粘贴到新标签页,再用Ctrl+H配合^[^:]+:\d+:\s*(.*)$提取冒号后内容 - Where栏限定路径,如
./src/**/*.js,避免扫整个项目拖慢响应 - 导出前务必检查文件编码:若出现方块或乱码,不是正则问题,是
file_encoding或fallback_encoding配置错位
真正卡住人的从来不是正则语法本身,而是换行符类型、空白符范围、捕获组作用域这三处细节。每次提取前花十秒确认当前文件的换行格式和编码,比反复调正则省力得多。











