网页包含许多图片元素:
<img src="myImage.gif" width="180" height="18" />
但它们可能不是很好,例如,宽度或高度属性可能会丢失。它也可能无法用/正确关闭。 src属性始终存在。
我需要一个正则表达式,用一个href包装它们,其中href设置为img的src。
<a href="myImage.gif" target="_blank"><img src="myImage.gif" width="180" height="18" /></a>
我可以在此编辑器中使用此正则表达式成功找到图像:http://gskinner.com/RegExr/:
<img src="([^<]*)"[^<]*>
但下一步是什么?
答案 0 :(得分:3)
基于DOM的方法最好,但如果该正则表达式(对于一般HTML输入不容易实现)以匹配所需的<img>
元素,则具有{的值在src
中捕获的{1}}属性,然后将整个匹配项(在\1
中捕获)替换为:
\0
在Java中,替换字符串中的反向引用将是<a href="\1" target="_blank">\0</a>
和$0
;我不确定你使用的是什么语言,所以要相应调整。
在Java中,这样的东西可以起作用:
$1
从您的问题中不清楚如何处理String imgHrefed = str.replaceAll(
"<img src=\"([^<]*)\"[^<]*>",
"<a href=\"$1\" target=\"_blank\">$0</a>"
);
可能具有的任何其他属性。上述替换使它们保持原样。如果你还想重写它们(即你不再只在<img>
中包裹<img>
),那么也许你想要改写它:
<a>
答案 1 :(得分:1)
在JavaScript中,使用string.replace()并将$1
作为您匹配的部分:
str.replace(/<img src="([^<]*)"[^<]*>/,
'"<a href="$1" target="_blank"><img src="$1" width="180" height="18" /></a>')
或者更好的是仍然捕获整个image
标记(现在src是$2
,因为它在第二次捕获中):
s.replace(/(<img src="([^<]*)"[^<]*>)/, '"<a href="$2" target="_blank">$1</a>')
答案 2 :(得分:1)
在.net中,正则表达式在大多数情况下与javascript基本相同,但周围代码的表示法略有不同。
string imageHtmlSnippet = @"<img src=""myImage.gif"" width=""180"" height=""18"" />";
string imageHtmlReplacement = @"<a href=""$1"" target=""_blank""><img src=""$1"" width=""180"" height=""18"" /></a>";
Regex findImages = new Regex(@"<img src=""([^<]*)""[^<]*>");
string fixedHtmlSnippet = findImages.Replace(imageHtmlSnippet, imageHtmlReplacement);
但是 - 如果src不是标签上的第一个属性,则此正则表达式将失败。我没时间修理它,因为我应该已经出门了:)
实际上你应该寻找一个html解析库,比如HtmlAgilityPack来解析它(如果你在.net中工作):