删除所有属性,但在html标记中使用regex指定

时间:2012-05-17 08:03:58

标签: html regex tags

我有这样的html标签:

<p class=MsoNormal align=center style='margin-top:1.0pt;margin-right:0in;margin-bottom:1.0pt;margin-left:0in;text-align:center;text-indent:0in;line-height:115%;text-autospace:none'>Something</p>

现在,我想这样做:

<p style='text-align:center;'>Something</p>

我该怎么做?

1 个答案:

答案 0 :(得分:0)

由于您标记了正则表达式,因此这里是一个正则表达式替换,它将根据您所说的内容进行匹配和替换:

<p class=MsoNormal [^>]*style='[^']*(text-align:[A-Za-z]*;?)[^']*'>(.*?)</p>

的更换:

<p style='$1'>$2</p>

这不是特别有效或必然是最好的方法。如果<p>标记包含另一个嵌套<p>(我很确定这不是有效标记,但最好还是提到它),因为它会与结束{匹配},因此会出现微妙的错误嵌套</p>的{​​1}}而不是我们想要匹配的外层{1}}。

另一个潜在的错误是,如果<p>元素中有嵌套的转义单引号,例如style,它就会搞乱。这可以通过更复杂的正则表达式来修复,但存在使其变得非常难以理解的风险。

在我看来,一个涉及解析的解决方案会好很多,比如NiftyDude对javascript的建议。