用正则删除标签及其内容应使用]*?>[\s\S]*?,需启用跨行匹配;同时须处理onxxx事件属性和javascript:伪协议才可彻底清除行内脚本。

用正则表达式匹配并删除 <script></script> 标签及其内容
HTML 中的行内脚本通常指写在 <script></script> 标签内的 JS 代码,包括内联 onxxx 属性(如 onclick)和 <script></script> 块。批量删掉它们,最直接有效的方式是用正则配合编辑器或脚本处理。
注意:正则不能完美解析嵌套 HTML,但对「无注释、无 CDATA、无转义标签」的常规 HTML 文件足够可靠。别用它处理含复杂模板字符串或动态生成 的文件。
- 匹配完整
<script>...</script>块(支持多行):<script>]*>[\s\S]*?</script> - 匹配常见事件属性(可叠加使用):
\s+on\w+\s*=\s*["'][^"']*["'] - VS Code / Sublime / Notepad++ 中启用「正则模式」和「跨行匹配」(如 VS Code 需勾选
.*按钮) - 替换为空即可;若想留空格防格式错乱,可替换成单个空格或换行符
用浏览器 DevTools 快速清理当前页面的行内脚本
开发调试时,有时只想临时移除当前页所有行内行为,不改源码。这时直接操作 DOM 最快。
打开控制台(F12),粘贴执行:
document.querySelectorAll('script, [onclick], [onload], [onerror], [onsubmit], [onchange], [oninput], [onkeydown], [onkeyup]').forEach(el => el.remove());
这段代码会删掉所有 <script></script> 元素和主流事件属性对应的元素。它不会删掉 javascript:void(0) 这类伪协议 href,也不处理通过 addEventListener 绑定的事件——那些不算「行内脚本」。
- 如果页面用了 Vue/React,
v-on:或onClick={}是框架绑定,不在该选择器范围内 - 删完后部分交互失效是预期行为,别误以为脚本没删干净
- 刷新页面即恢复,适合快速验证是否是某段行内 JS 导致的问题
用 Python 脚本安全批量清洗 HTML 文件
处理几十个 HTML 文件时,手动正则或浏览器操作太慢,且容易漏。Python + BeautifulSoup 更稳,尤其能避开注释块、 内容等陷阱。
安装依赖:pip install beautifulsoup4
核心逻辑是:遍历所有 <script></script> 标签并解构,再查所有带 on 开头的属性并逐个删掉:
from bs4 import BeautifulSoup
<p>with open('page.html', 'r', encoding='utf-8') as f:
soup = BeautifulSoup(f, 'html.parser')</p><p>for script in soup.find_all('script'):
script.decompose()</p><p>for tag in soup.find_all(lambda t: any(attr.startswith('on') for attr in t.attrs.keys())):
for attr in list(tag.attrs.keys()):
if attr.startswith('on'):
del tag[attr]</p><p>with open('clean.html', 'w', encoding='utf-8') as f:
f.write(str(soup))</p>
-
decompose()彻底移除节点;用extract()会保留空白,可能影响后续渲染 - 必须用
list(tag.attrs.keys()),否则遍历时修改字典会报RuntimeError - 不推荐用
lxml默认解析器处理含错误 HTML 的老项目,html.parser更容错
为什么不能只删 <script></script> 标签就完事
很多团队以为删掉 <script></script> 就清掉了所有行内脚本,结果上线后仍有 XSS 风险或行为残留——因为忽略了事件属性和伪协议。
-
不含<script></script>,但仍是行内执行 -
的onerror属性在标签内部,属于典型行内脚本 - 某些 CMS 生成的 HTML 会把 JS 写进
data-*属性再由 JS 解析执行,这类需结合业务逻辑判断,不能靠通用规则清除
真正“批量删除行内脚本”,得同时覆盖三类载体:<script></script> 块、onxxx 属性、javascript: 伪协议。少一个,都可能留下安全隐患或功能异常。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











