如何使用正则表达式匹配并删除以<script type="application/ld+json">开头、</script>结尾的内容块
嘿,我懂你现在的烦恼——想用正则删掉那些包含JSON-LD的script代码块,但自己写的表达式不管用对吧?我来帮你分析下问题,再给你几个靠谱的解决方案。
首先,你原来的正则(?<=<script type="application/ld+json">).*(?=</script>)有几个明显的问题:
.*不匹配换行:默认情况下,正则里的.不会匹配换行符,而你的目标内容块有大量换行,所以根本匹配不到完整的内容。+没转义:正则里的+是量词(表示前面的字符出现1次或多次),你这里的ld+json里的+是字面量,必须转义成\+才能正确匹配。- 贪婪匹配风险:就算解决了换行问题,默认的
*是贪婪模式,可能会匹配到页面最后一个</script>,误删其他正常的script标签。
靠谱的解决方案
根据不同的使用场景,给你两种常用的正则写法:
写法一:直接匹配整个标签块(推荐,兼容性更好)
<script type="application/ld\+json">[\s\S]*?</script>
[\s\S]:匹配所有字符(包括换行符),等效于开启DOTALL模式的.,适配各种工具。*?:非贪婪量词,确保匹配到第一个</script>就停止,避免误删后续内容。\+:转义后的加号,正确匹配标签里的ld+json字符串。
写法二:基于你原来的lookaround思路(部分工具支持)
如果你坚持用前后断言的方式,可以调整成这样:
(?<=<script type="application/ld\+json">)[\s\S]*?(?=</script>)
不过要注意:有些工具(比如早期的JavaScript环境)不支持可变长度的正向预查,所以这种写法兼容性不如第一种。
使用示例(以VS Code为例)
- 按下
Ctrl+H打开替换面板 - 点击面板右侧的
.*图标,开启正则表达式模式 - 在“查找内容”框输入上面的正则
- “替换为”框留空,点击“全部替换”就能删掉所有目标块了
额外提示
如果你的页面里这类script标签还有额外属性(比如id或者class),可以把正则调整得更灵活:
<script.*?type="application/ld\+json">[\s\S]*?</script>
这样就能匹配任意属性的JSON-LD类型script标签了。
备注:内容来源于stack exchange,提问作者Just Me

