regex - 使用正则表达式查找具有给定属性的嵌套 HTML 元素
问题描述
我希望能够使用正则表达式从文件中删除某些 HTML 元素。这些元素中有嵌套的元素,我也想删除它们。
简化示例:
<div style="display:none"></div>
<div style="display:none">
<span>Some text</span>
</div>
我有一个这样的模式,<([a-z]*)\s[^>]*display:none[^\/]*<\/\1>
可以成功匹配非嵌套项目。
如何更新正则表达式以包含嵌套元素?
解决方案
终于解决了:
<([a-z]*)\s[^>]*display:none.*?(<\/\1>)
解释:
<([a-z]*)\s
匹配起始元素标签和空格[^>]*
匹配到元素标签的末尾display:none
确保“display:none”在元素标签内.*?
匹配一切直到..(<\/\1>)
同类型元素的结束标签
偶然发现此答案的任何人的注意事项:
- 这不适用于自闭合标签。(例如
<div />
) - 这不适用于 void 元素。(例如
<input>
) - 如果元素包含相同类型的嵌套,这将不起作用。(例如
<div style="display:none"><div></div></div>
) - 这确实适用于使用正确选项(全局、扩展、单行)的换行符
推荐阅读
- node.js - 使用 mongoose 应该使用哪种方法来更新 mongodb 中的文档?
- sql - 在 postgresql 中查看
- java - 为什么计时器忽略格式?
- javascript - 如何在 Nuxt 中渲染异步和动态组件?
- c - 将指针转换为用于散列的数值 - 我应该使用 `uintptr_t` 还是 `intptr_t`?
- javascript - 如何等待 js 导出的 api 调用?
- google-cloud-platform - Google Cloud Build 总是连接到错误的 GitHub 帐户
- java - 从嵌套的 HashMap 中收集
- javascript - 没有 npm 脚本适用于 react 项目
- php - PHP 休息服务没有返回正确的响应