能删,但必须用多行模式+贪婪匹配,避开嵌套和注释干扰;默认单行正则因.不匹配换行符而失效;需勾选matches newline,用]*>[\s\s]*?匹配并替换为空或保留空标签。

如何用 Notepad++ 正则匹配并清空 <script></script> 标签内的全部内容
直接说结论:能删,但必须用「多行模式」+ 贪婪匹配,且要避开嵌套和注释干扰。默认的单行正则会失败。
常见错误现象:Find what 填 <script>.*</script>,结果什么都没选中,或只删了第一行——因为 . 默认不匹配换行符。
- 打开 Notepad++,按
Ctrl + H调出替换窗口 - 勾选
Match case(可选)和Matches newline(关键!等价于/s修饰符) -
Find what填:<script>]*>[sS]*?</script> -
Replace with填:<script></script>(保留空标签)或留空(彻底删除标签及内容) - 点击
Replace All
说明:[sS] 是兼容换行的万能字符类;*? 防止跨标签贪婪匹配(比如误吞下一个 <script></script>);[^>]* 容忍带属性的 <script type="text/javascript"></script>。
为什么 <!-- --> 注释里的 <script></script> 会被误删
正则本身无法识别 HTML 注释边界,只要文本里出现字面量 <script></script> 和 ,就会被当作标签处理。
- 如果你的 HTML 里有类似
<!-- <script>alert(1)</script> -->的写法,上述正则会把它当真标签删掉 - Notepad++ 没有「HTML 解析器」,纯靠字符串匹配,这是根本限制
- 临时规避办法:先手动删掉所有注释(用
<!--[sS]*?-->替换为空),再处理<script></script>
想只删内容、保留标签和属性,怎么写正则
目标是把 <script src="a.js">console.log(1);</script> 变成 <script src="a.js"></script>,而不是粗暴删成 <script></script>。
-
Find what:(<script>]*>)[sS]*?(</script>) -
Replace with:$1$2 - 必须确保
Matches newline已勾选,否则$1和$2之间内容太长时会失效 - 注意:如果标签是自闭合写法(如
<script></script>),此正则不适用——HTML 标准里<script></script>不允许自闭合
遇到 <script></script> 嵌套或动态拼接就别硬刚正则
像 <script>document.write("<script>...</script>"); 这种,正则完全无解——它不是结构化 HTML,而是运行时生成的字符串。
这类场景本质已超出文本编辑器能力边界:Notepad++ 不执行 JS,也不解析 DOM。强行写更复杂的正则只会增加误删风险,且不可维护。
真正需要处理这种内容时,应该用浏览器 DevTools 或 Node.js 的 jsdom + cheerio 做真实解析——正则只适合清理格式规整、无逻辑嵌套的静态 HTML。











