如何删除字符串中 HTML 标记中的所有 HTML 属性
我试图获取一个包含 HTML 的字符串,去掉一些标签(img、object)和所有其他 HTML 标签,去掉它们的属性。例如:
<div id="someId" style="color: #000000">
<p class="someClass">Some Text</p>
<img src="images/someimage.jpg" alt="" />
<a href="somelink.html">Some Link Text</a>
</div>
会变成:
<div>
<p>Some Text</p>
Some Link Text
</div>
我正在尝试:
string.replaceAll("<\/?[img|object](\s\w+(\=\".*\")?)*\>", ""); //REMOVE img/object
但我不确定如何删除标签内的所有属性。
任何帮助将不胜感激。
谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您想过滤特定标签,我不会推荐使用正则表达式。这将是一项艰巨的工作,而且永远不会完全可靠。使用普通的 HTML 解析器,例如 Jsoup。它提供了
Whitelist
API 进行清理HTML。另请参阅此食谱文档。这是在 Jsoup 的帮助下的启动示例,它只允许在所选
Whitelist< 的标准标签集旁边使用
和
标签/code> 是
Whitelist#simpleText()
。这导致
另请参阅:
I would not recommend regex for this if you want to filter specific tags. This is going to be hell of a job and never going to be fully reliable. Use a normal HTML parser like Jsoup. It offers the
Whitelist
API to clean up HTML. See also this cookbook document.Here's a kickoff example with help of Jsoup which only allows
<div>
and<p>
tags next to the standard set of tags of the chosenWhitelist
which isWhitelist#simpleText()
in the below example.This results in
See also:
您可以像这样删除所有属性:
此表达式匹配开始标记,但仅捕获其标头
和结束
使用对这些组的引用,将它们以>
作为组 1 和 2。 >replaceAll$1$2
的形式重新加入到输出中。这会剪掉标签中间的属性。You can remove all attributes like this:
This expression matches an opening tag, but captures only its header
<div
and the closing>
as groups 1 and 2.replaceAll
uses references to these groups to join them back in the output as$1$2
. This cuts out the attributes in the middle of the tag./<(/?\w+) .*?>/<\1>/
可能有效 - 获取标签(匹配组)并读取任何属性,直到右括号并将其替换只有背板和标签。/<(/?\w+) .*?>/<\1>/
might work - takes the tag (the matching group) and reads any attributes until the close bracket and replaces it with just the backets and the tag.如果您使用 SAX 或 DOM,并获取节点名称和值,并删除所有属性,可能会容易得多。
Probably would be much easier if you are using a SAX or DOM, and take the node name and value, and remove all attributes.