说实话,Sublime Text 本身并没有提供“一键导出匹配内容为纯列表”这样方便的功能,所有提取操作都得靠 Find All 或 Find in Files 的结果整理。别指望它能自动去重、转数组或生成 CSV——那是后续步骤,得自己处理。
怎么让 Find All 选中的是纯关键词,而不是整行?
关键在于正则里用 () 捕获目标部分,并确保匹配范围最小化。如果写成 var\s+(\w+)\s*= 却没限制上下文,Sublime 会从 var 开始一直吃到行尾,$1 就拿不到干净的变量名。
- 用非贪婪量词:
console\.log\(\s*["']([^"']*)["']比console\.log\(\s*["'](.*)["']更安全,避免跨引号吞掉后面内容 - 排除干扰边界:提取函数名时用
function\s+(\w+)\s*\(\),不是function\s+(\w+),否则可能捕获到functionName中的Name - 测试先行:先在单个文件按
Ctrl+F输入正则,看高亮是否只框住你要的部分;不行就调窄范围,比如加\b或锚定空格
为什么 $1 在 Replace in Files 里不生效?
因为 Replace in Files(Ctrl+Shift+H)面板不支持捕获组引用——它只把 $1 当字面字符串输出。这是 Sublime 的硬限制,不是你正则写错了。
- 真正能用
$1的地方只有当前文件的Replace面板(Ctrl+H),且必须点开右下角的.*图标 - 想批量提取关键词?别走 Replace in Files,改用
Find in Files(Ctrl+Shift+F)→ 点Find→ 复制结果页文本 → 粘贴后用列编辑或二次替换清理 - 想保留关键词并重构?先在单个文件确认
Find和Replace(填$1)逻辑正确,再切到Replace in Files执行无引用的批量替换
提取后怎么快速去重、分行、转数组?
复制出来的结果通常是带路径和行号的杂乱文本,比如 main.js:42: id: "user_id"。直接粘贴进新文件后,得靠组合操作收尾。
- 去重:粘贴后全选 →
Ctrl+Shift+P→ 输入Sort Lines→ 回车 → 再执行一次Remove Duplicate Lines(需提前安装 Package Control 的相应插件,原生不支持) - 分行:若替换时用了
$1\n,但末尾多空行,可用^$\n(开启正则)替换为空来清理 - 转数组:手动补
["开头、"]结尾,再对换行符做\n→", "替换;注意首尾引号和逗号位置,别漏掉第一个或最后一个
最易被忽略的是作用域控制:默认正则对整个文件生效,但如果你只选中了一段 JSON,又忘了勾选 In Selection 提示,那替换就会跑出范围。还有编码问题——粘贴进来的文本带 BOM 或零宽空格,正则直接失效,得先 File → Reopen with Encoding → UTF-8 强制重载。