【发布时间】:2019-12-06 22:48:04
【问题描述】:
我正在努力为 html 扫描构建正则表达式。正则表达式应匹配不包含任何一个 async 或 defer 属性的任何<script> html 元素。
单元测试:
-
<script defer src="a.js">应该not match -
<script src="a.js" defer>应该not match -
<script src="a.js">应该match -
<script async src="a.js">应该not match -
<script src="a.js" async>应该not match
我已经摆弄了一个解决方案,用于在单个属性上设置它(分别为^.*<script((?!defer).)*$ 和 ^.*<script((?!async).)*$),并且我还创建了一个匹配的 html 元素 /em> 包含任一属性 (<script.+(?=defer|async).+>) 但我无法反过来理解它。
有什么想法吗?
【问题讨论】:
-
我强烈建议您使用适当的 HTML 解析器。您正在尝试做的事情充满危险,因为有很多情况您没有考虑,并且正则表达式不是适合这项工作的工具。有关示例,请参阅htmlparsing.com/regexes.html。
-
嗨@AndyLester - 我绑定到一个特定的html扫描工具,只允许规则生成器中的正则表达式。好消息是它只标记匹配项,稍后由编辑器/编码器处理。感谢您提供的链接,我已经转交给管理我们正在使用的工具的同事。
标签: regex