Sublime用Ctrl+H正则重构HTML表格快且稳,关键在正确书写正则(如<td>([^<]*)</td>)、控制匹配范围、替换前人工核验3处以上。

直接用 Ctrl+H + 正则模式,别写脚本、别导Excel、别碰插件——Sublime 处理静态 HTML 表格数据重构,快且稳,前提是正则写对、范围控住、替换前必核验。
匹配 <tr> 里的 <td> 内容但不跨行
表格数据常是多行 <tr> 套若干 <td>,想提取每行的字段做清洗或重排,不能让 .* 越界吞掉下一行。常见错误是写 <td>(.*?)</td> 却没关单行模式,结果从第一个 <td> 一直吃到文件末尾最后一个 </td>。
- 安全写法:
<td>([^<]*)</td>——[^<]*明确表示“非左尖括号字符”,不会跨标签 - 若内容含 HTML 实体(如
)或嵌套标签(极少见但存在),得先清理或改用<td>([\s\S]*?)</td>,但必须配合<tr>([\s\S]*?)</tr>外层包裹,否则仍可能越界 - 匹配整行
<tr>:用<tr>([\s\S]*?)</tr>,再在替换中用$1提取内部所有<td>,避免手动点多次Find All
把 <td> 批量转成 JSON 字段或 CSV 行
比如原始表格每行是姓名、城市、年龄,想转成 {"name":"张三","city":"北京","age":"28"} 或 "张三","北京","28"。关键在分组捕获顺序和引号/逗号控制。
- 先确保三列
<td>连续出现:查找<td>([^<]*)</td>\s*<td>([^<]*)</td>\s*<td>([^<]*)</td> - 转 JSON:
{"name":"$1","city":"$2","age":"$3"}—— 注意双引号要手动加,$1不自动带引号 - 转 CSV:
"$1","$2","$3"—— 若某字段本身含双引号,需额外处理(如替换成""),Sublime 不支持条件替换,得拆两步 - 如果列数不固定,别硬写三个
([^<]*),改用<td>([^<]*)</td>配合Find All+Ctrl+Shift+L多光标,再逐列操作
替换时保留原有缩进,但清除 <td> 标签
很多人想删标签只留文本,却用 <td>|</td> 分两步替换,结果空行、缩进错乱。更稳的方式是一次性捕获内容并复用空白符。
立即学习“前端免费学习笔记(深入)”;
- 查找:
(\s*)<td>([^<]*)</td>(\s*)—— 用三组分别捕获行首空格、内容、行尾空格 - 替换:
$1$2$3—— 这样缩进不变,<td>和</td>消失,内容原位留下 - 若
<td>内有换行或空格(如<td>\n text\n</td>),[^<]*会失败,此时改用(\s*)<td>([\s\S]*?)</td>(\s*),但务必先Find All确认高亮没吞错块 - 注意:HTML 中
<td>可能带属性(如<td align="center">),上面正则不匹配;需扩展为<td[^>]*>,但会增加复杂度,建议先统一清理属性再处理
执行 Replace All 前必须人工核验 3 处以上
Sublime 没有预览窗口,Replace All 是原子操作,跨多文件时 Ctrl+Z 只能撤回当前焦点文件。尤其表格重构常涉及嵌套、空单元格、合并单元格(colspan)、注释等干扰项,自动替换极易出错。
- 永远先点
Find All,看状态栏数字是否符合预期;再上下滚动,检查高亮是否精准落在目标<td>内,有没有漏掉或吞多 - 选中一个典型行(含空值、引号、特殊字符),按
Ctrl+Shift+H开启替换预览(仅限当前文件),确认$1展开结果正确 - Where 输入框必须填清楚范围,例如
./src/pages/, -node_modules/, -dist/,留空 = 只改当前页;填*或**= 匹配失败 - 最易忽略的一点:UTF-8 BOM 或 GBK 编码文件里,中文可能被截断或乱码,导致正则失效——先用
File → Reopen with Encoding → UTF-8统一编码再操作



















