首页 > 解决方案 > 使用正则表达式查找具有给定属性的嵌套 HTML 元素

问题描述

我希望能够使用正则表达式从文件中删除某些 HTML 元素。这些元素中有嵌套的元素,我也想删除它们。

简化示例:

<div style="display:none"></div>
<div style="display:none">
  <span>Some text</span>
</div>

我有一个这样的模式,<([a-z]*)\s[^>]*display:none[^\/]*<\/\1>可以成功匹配非嵌套项目。

如何更新正则表达式以包含嵌套元素?

标签: regex

解决方案


终于解决了:

<([a-z]*)\s[^>]*display:none.*?(<\/\1>)

解释:

  • <([a-z]*)\s匹配起始元素标签和空格
  • [^>]*匹配到元素标签的末尾
  • display:none确保“display:none”在元素标签内
  • .*?匹配一切直到..
  • (<\/\1>)同类型元素的结束标签

偶然发现此答案的任何人的注意事项:

  • 这不适用于自闭合标签。(例如<div />
  • 这不适用于 void 元素。(例如<input>
  • 如果元素包含相同类型的嵌套,这将不起作用。(例如<div style="display:none"><div></div></div>
  • 确实适用于使用正确选项(全局、扩展、单行)的换行符

推荐阅读