我是一个正则表达式的新手,试图过滤HTML标签并只保留必需的(src/href/style)属性及其值,并删除不必要的属性。当我在谷歌上搜索时,我找到了一个仅保留"src"属性的正则表达式,因此我的修改后的表达式如下:
<([a-z][a-z0-9]*)(?:[^>]*(\s(src|href|style)=['\"][^'\"]*['\"]))?[^>]*?(\/?)>
它的工作正常,但唯一的问题是,如果一个标签包含多个必需属性,则仅保留最后匹配的单个属性并丢弃其余属性。
我正在尝试清理以下文本
<title>Hello World</title>
<div fadeout"="" style="margin:0px;" class="xyz">
<img src="abc.jpg" alt="" />
<p style="margin-bottom:10px;">
The event is celebrating its 50th anniversary Kö
<a style="margin:0px;" href="http://www.germany.travel/">exhibition grounds in Cologne</a>.
</p>
<p style="padding:0px;"></p>
<p style="color:black;">
<strong>A festival for art lovers</strong>
</p>
</div>
使用上述表达式,在https://regex101.com/#javascript 上,将<$1$2$4>
作为替换字符串,得到以下输出:
<title>Hello World</title>
<div style="margin:0px;">
<img src="abc.jpg"/>
<p style="margin-bottom:10px;">
The event is celebrating its 50th anniversary Kö
<a href="http://www.germany.travel/">exhibition grounds in Cologne</a>.
</p>
<p style="padding:0px;"></p>
<p style="color:black;">
<strong>A festival for art lovers</strong>
</p>
</div>
问题是锚点标签中的“style”属性被丢弃了。我尝试使用*运算符、{3}选择器等来复制(\s(src|href|style)=['\"][^'\"]*['\"])
块,但都无济于事。有什么建议吗?