直接删 style=".?" 会误伤 data-style、title 等,因未锚定属性名边界和引号配对;正确写法是 style\s=\s["'](1)["'],确保匹配独立 style 属性及同类型成对引号内的值。"' ↩

直接删 style=".*?" 会误伤 data-style、title 甚至破坏 HTML 结构,必须用带引号边界和属性名锚定的正则。
为什么 style=".*?" 是高危操作
这个写法看着简单,但实际会跨边界匹配:遇到 <div style="color:red" data-style="ignore">,它可能吞掉 <code>" data-style="ignore" 这段,导致标签不闭合;更糟的是,它还会匹配 title="style is not an attribute" 里的 style 字符串。根本原因是没锁定属性名边界,也没约束引号配对。
-
style必须是独立属性名,不能是其他属性的子串(如data-style) - 值必须严格落在成对引号内,且引号类型(
"或')要一致 - 等号前后可能有空格或换行,
\s*比硬写空格更鲁棒
安全删除 style 属性的正则写法
启用正则模式(点击右下角 .*),查找框填:style\s*=\s*["']([^"']*)["'],替换框留空,点 Replace All。
-
\bstyle\b更稳妥,但 Sublime 的 PCRE 对单词边界的处理在某些 HTML 上不稳定,所以用style\s*=已足够区分 -
["']([^"']*)["']强制匹配同类型引号包裹的值,[^"']*确保不跨引号,避免吃掉后续属性 - 别用
.*?替代[^"']*——非贪婪在复杂嵌套里仍可能过早收尾,比如style="width:100%; height:auto;"中的分号会被误判为结束
删完后常被忽略的残留问题
正则只删属性本身,不处理属性删掉后留下的多余空格或换行。例如 <div class="x" style="a" id="y"> 删掉 <code>style 后变成 <div class="x" id="y">,中间双空格虽不影响渲染,但影响可读性。
<ul>
<li>删完再跑一次 <code>\s{2,} → (单个空格),能压缩多余空白
style 在单独一行),需先勾选 . matches newline 才能匹配完整属性;否则只删单行部分,留下半截<img style="max-width:90%">)同样适用该正则,无需额外处理其他内联属性(width、height)怎么安全删
逻辑和 style 一样,但必须加单词边界 \b,否则会误删 min-width、data-height 等:
- 查:
\b(width|height)\s*=\s*["'][^"']*["'],替为空 - 别用
width.*?/?>——它会把<svg width="100" viewbox="0 0 100 100"></svg>里的viewBox当作匹配终点,破坏属性顺序 - 如果目标文件含 SVG 或 MathML,这些命名空间敏感的属性建议人工抽检前 3 处匹配,确认没动到
xml:space类属性
真正麻烦的不是写不出正则,而是删完发现某个 data- 属性名里恰好含 style,或者某处 onload="do(); style=1" 被当成属性干掉了——这种边缘 case 得靠 Find All 后肉眼扫一遍高亮,而不是依赖“全部替换”。











