Sublime正则替换批量替换HTML代码中的文本内容
html中. *?易越界匹配,因.默认不匹配换行且sublime下跨行退化为贪婪;应改用[\s\s]*?或[^>]*等显式范围限定,并注意引号、路径、目录排除及替换前验证。

为什么 .*? 在 HTML 替换里经常越界
想提取 <div class="content">...</div> 里的文字,很多人写 <div class="content">.*?</div>,结果一执行,匹配从第一个 <div> 一直吞到**最后一个** <code>
,中间所有嵌套、注释、JS 字符串全被吃掉。这不是正则写错了,是
. 默认不包含换行,而 Sublime 的
.*? 在跨行时会退化为“尽可能多匹配”,尤其当 HTML 没缩进、标签挤在一起时更危险。
稳妥做法是显式声明字符范围:<div>]*>([sS]*?)</div>。其中:
-
[^>]* 防止在开标签里误吞属性(比如 <div id="a" class="content">)<li>
<code>[sS] 明确表示“任意字符,包括换行”,比 (?s).*? 更可控
-
? 必须保留,否则 [sS]* 会贪婪吞到文档末尾
src="..." 类属性替换必须用 [^"]*,别信 .*?
批量把 src="images/logo.png" 改成 src="{% static 'images/logo.png' %}",如果写 src=".*?.png",它可能匹配到 src="a.png" alt="b.png" 整段,因为 .*? 只保证“最短”,但不保证“不跨引号”。一旦中间有空格、其他属性或换行,就崩。
正确写法是:src="([^"]*.png)" → src="{% static '$1' %}"。要点:
-
[^"]* 表示“除双引号外任意字符”,天然卡在下一个 " 前
- 小括号必须存在,否则
$1 拿不到内容
- 单引号路径(
src='x.jpg')得另写一条规则,不能混用 ["'] —— HTML 解析器对引号类型敏感,混合匹配可能漏掉真实属性
跨文件批量改 HTML,Where 框填错等于重装系统
用 Ctrl+Shift+F 批量操作前,Where 框决定你动的是哪部分。填 ./ 或留空?Sublime 会扫整个磁盘根目录;填 **/*.html?它不识别 **,只搜当前目录下后缀为 .html 的文件。
Html2md
使用 Readability + Turndown 将 HTML 页面转换为干净的、Agent 友好的 Markdown。去除导航栏、广告、页脚、Cookie 横幅、社交按钮等干扰元素。支持 URL...
下载
安全写法是:., -node_modules/, -dist/, -build/(逗号分隔,斜杠统一)。注意:
- 减号
- 表示排除,不是连字符
- 路径结尾必须加
/,否则 -dist 可能误排除 distro/ 这类目录
- 如果项目结构是
src/pages/*.html,直接写 src/pages/ 更精准,避免漏掉或误扫
执行 Replace All 前不点 Find All 就等于闭眼开车
Sublime 没有替换预览窗口。Replace All 一点下去,所有匹配项立刻修改,跨多文件时 Ctrl+Z 可能只撤回部分文件(失焦的没响应)。最可靠验证方式是:先输好正则,点 Find All(快捷键 Alt+Enter),看底部面板列出的匹配项是否符合预期。
人工核验时重点关注: