2010-04-22 11 views
1

正则表达式来包装图像A网页包含大量图像元素:构建有<a>

<img src="myImage.gif" width="180" height="18" /> 

但是它们可能不是非常良好的,例如,宽度或高度的属性可能会丢失。而且它也可能无法用/正确关闭。 src属性始终存在。

我需要一个正则表达式,它包含这些超链接,其中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

的语言,你找什么? – rtpHarry 2010-04-22 07:21:37

+0

只是好奇,不应该是'... [^>] *>'? – polygenelubricants 2010-04-22 07:22:05

+0

@polygenelubricants更改[^ <] to [^>]或[^ <>]应该没问题,因为这两个字符不应该出现在这些地方。 – bobo 2010-04-22 15:47:09

回答

3

一个基于DOM的方法是最好的,,但如果该正则表达式工作(对于一般HTML输入不容易完成)以匹配期望的<img>个元素,在\1捕获的src属性的值,则只需更换与整个匹配(在\0捕获):

<a href="\1" target="_blank">\0</a> 

在Java中,在替换字符串反向引用将$0$1;我不确定您使用的语言是否相应地进行调整。

在Java中,不过,像这样的工作:

String imgHrefed = str.replaceAll(
    "<img src=\"([^<]*)\"[^<]*>", 
    "<a href=\"$1\" target=\"_blank\">$0</a>" 
); 

这不是从你的问题不清楚是什么做任何其他属性的<img>可能。上述替换保持原样。如果你也想重写他们(即在<a>你不只是包装<img>了),那么也许你想重写这个:

<a href="\1" target="_blank"><img src="\1" width="180" height="18" /></a> 
+0

所有的答案都非常相似,因为这个获得最多的选票,我遵循多数人这是最好的。 – bobo 2010-04-22 15:38:10

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>') 
+0

我不是在JavaScript中工作,但这应该是一个有用的。谢谢。 – bobo 2010-04-22 15:31:18

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解析它(如果你在工作。网):

+0

我没有使用任何特定的语言。我只是使用该编辑器并尝试在HTML文档中用超链接包装图像。但是,当我在.NET中工作时,您的代码片段应该很有用。谢谢。 – bobo 2010-04-22 15:35:08