用于HTML属性替换/添加的正则表达式

时间:2008-12-11 14:49:39

标签: html regex

我正在寻找单行正则表达式,它执行以下操作:

给定带有“name”属性的HTML标记,我想用自己的属性替换它。如果该标签缺少name属性,我想植入我自己的属性。结果应如下所示:

<IMG name="img1" ...> => <IMG name="myImg1" ...>
<IMG ...> => <IMG name="myImg1" ...>

这可以用单行正则表达式完成吗?

3 个答案:

答案 0 :(得分:4)

技巧是匹配每个完整的“attribute = value”对,但捕获只有属性名称不是“name”的那些。然后插入您自己的“名称”属性以及所有捕获的属性。

s/<IMG
  ((?:\s+(?!name\b)\w+="[^"]+")*)
  (?:\s+name="[^"]+")?
  ((?:\s+(?!name\b)\w+="[^"]+")*)
  >
 /<IMG name="myName"$1$2>
 /xg;

答案 1 :(得分:1)

这不是一个完美的解决方案,标签内的间距和位置可能不是您想要的,但它确实实现了目标。这是一个perl正则表达式,但没有特别关于它的perl特定。

s/(&lt;IMG)((\s+[^&gt;]*)name="[^"]*")?(.*)/$1$3 name="myID"$4/g

答案 2 :(得分:0)

如果在您的示例中,name属性始终是IMG标记内的第一个,那么它非常简单。搜索

<(?!/)(/w+)\s+(name="[^"]+")?

并替换为

<\1 name="myImg1"

但我怀疑这是你真正想要的。

如果name属性可能出现在其他位置,则会变得更加困难。