使用<a></a>构造一个正则表达式来包装图像

时间:2010-04-22 07:09:23

标签: html regex

网页包含许多图片元素:

<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="([^<]*)"[^<]*>

但下一步是什么?

3 个答案:

答案 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中工作):