2010-04-22 58 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