Sublime Text正则替换默认单行模式,^$匹配行首尾;提取// TODO行用^\s*//\s*TODO.*$,配合反向选择删除非匹配行;捕获组如(/1+)可提取路径,替换用$1;注意\n需用Ctrl+Enter插入,BOM编码需转UTF-8无BOM。* ↩

匹配以特定标记开头的整行内容
Sublime Text 的正则替换默认是单行模式,^ 和 $ 只匹配当前行首尾,这点很关键——不用额外开启多行模式(m 标志)也能精准按行处理。
比如要提取所有以 // TODO 开头的注释行(含空格前缀也算),正则写成:^\s*//\s*TODO.*$
-
^\s*匹配行首任意空白(包括制表符、空格),避免因缩进漏掉 -
//\s*TODO允许//后跟零或多个空白再接TODO,兼容//TODO和// TODO -
.*$捕获整行剩余内容,确保不截断后面的文字或代码 - 别忘了在 Sublime 的查找框右下角点开
.*图标(启用正则),否则^会被当字面量
只保留匹配行,快速“过滤”出目标内容
直接替换为 $0 不起作用——那只是原样保留,不会删掉其他行。真正要“提取”,得用「反向选择 + 删除」组合技:
- 先用上面的正则执行
Find All(Ctrl+Alt+G / Cmd+Ctrl+G) - 按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(Mac)调出命令面板,输入Select Inverse回车 - 此时未匹配的行全被选中,按
Delete或Backspace一键清除 - 如果担心误操作,建议先
Ctrl+Shift+T(重开标签页)做副本再操作
提取带捕获组的内容并重构格式
如果标记本身有结构(比如 /* @api GET /users */),想只拿路径部分,就得用捕获组:
查找:/\*\s*@api\s+\w+\s+(/[^*]+)\s*\*/
替换:$1
-
(/[^*]+)是关键:括号捕获第一个/开始、直到遇到*前的所有字符,避开注释结尾 - 替换时用
$1引用第一组,就能把整行变成干净的路径,比如/users - 注意
[^*]比.*?更安全——后者在跨行或嵌套注释里容易贪婪过头 - 若需保留换行,替换为
$1\n;若要合并成一行,替换为$1,再手动删末尾逗号
常见失效原因和绕过方法
不是正则写错,而是 Sublime 的隐性行为在捣鬼:
-
\n在替换框里不认作换行符,必须用\r\n(Windows)或\n(macOS/Linux)——但更稳妥的是用Ctrl+Enter直接插入真实换行 - 文件编码含 BOM(如 UTF-8 with BOM)时,
^可能匹配不到首行——临时转成 UTF-8(无 BOM)再操作 - 如果标记跨多行(如
/* @desc\n多行说明 */),默认正则不跨行,得加(?s)前缀:(?s)/\*\s*@desc.*?\*/,但此时$失效,改用\n或\r\n显式断行 - 大量文件批量处理?别用「Replace in Files」——它不支持
$0或$1引用,只能靠插件(如 Find++)或导出后脚本处理
正则替换看着快,但跨行、编码、BOM、批量场景下的边界条件,往往比写正则本身更耗时间。

















