2012-04-17 79 views
1

我需要一個正則表達式,它將返回一個沒有alt屬性的引用之間有任何東西的圖像標籤。例如,我希望它返回一個具有alt =「」或沒有alt,但沒有alt =「y」的img標籤。正則表達式找到<img />標籤沒有alt =「。#」

圖像標籤中可能會有換行符,並且每行可能有多個圖像標籤。

目前,我有什麼是:

<[email protected](~[\r\n]|[\r\n])*[email protected](~(alt=".#"))*[email protected](~[\r\n]|[\r\n])*[email protected]/> 

,我測試它在此:

<img alt="" /> 
<img src="xyz.jpg" 
alt="y" /> 
<img xxxx ABC /> 
<img xxxxxx ABC /> 
<img src="xyz.jpg" alt="y" /> 

但我的正則表達式返回每個圖像標籤,包括第2和第第五個我不想回來的。

我正在使用Microsoft Expression Web。

+4

正則表達式是不是解析器。他們不適合處理HTML。 – 2012-04-17 19:17:09

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Joe 2012-04-17 19:38:40

+0

這是人們反芻你不能用正則表達式的情況之一是對的。正則表達式無法處理嵌套標籤,所以像''這樣的東西不能用正則表達式解析。如果你能保證img標籤永遠不會包含其他img標籤,正則表達式將只會起作用。 – 2012-04-17 22:10:27

回答

1

最好的辦法是使用jQuery將字符串解析爲一個html節點,然後使用選擇器從那裏過濾它們。

var str = '<img alt="" /><img src="xyz.jpg" alt="y" /><img xxxx ABC /> <img xxxxxx ABC /><img src="xyz.jpg" alt="y" />'; 
var elementsWithoutAlt = $(str).filter('not([alt])'); 
console.log(elementsWithoutAlt.length); 

'not([alt])'將找到所有沒有alt屬性的元素。 'img:not([alt])'將會找到所有沒有alt屬性的'image'元素。

演示:(點擊渲染,看看它在行動) http://jsbin.com/imeyam/3/edit

jQuery的信息 http://api.jquery.com/has-attribute-selector/

+0

謝謝拉里和大衛的建議。 – MNRSullivan 2012-04-17 19:59:22

+0

我目前正在嘗試實現這個jQuery解決方案。我希望能夠通過頁面讀取並輸出每個img標籤中的源代碼,而不使用alt屬性。我怎麼能這樣做? – MNRSullivan 2012-04-19 18:47:34

+0

你應該試用jQuery,以便更好地理解它。你有什麼問題? $(str)返回DOM元素的集合,filter('not([alt])')過濾器返回沒有alt屬性的元素。 – 2012-04-20 03:09:36

2

你可能想看一下XPath,而不是這樣做。如果您正在查找具有空alt屬性的元素,則可以使用.NET中的XmlDocument加載文檔,然後調用SelectNodes(「// img [@ alt ='']」)選擇節點。

+0

尼斯大衛。但有沒有一些工具可以使用jquery/css選擇器而不是XPath? – TMS 2012-04-17 19:38:52

+0

拉里的迴應看起來相當不錯。也許這會有所幫助。就正確的解決方案而言,我認爲這取決於運營商的需求。 – 2012-04-17 19:48:53

+0

大衛,我想OP會希望服務器端的解決方案,因爲你是一個,我很好奇選擇器解決方案是否也可以在服務器端... – TMS 2012-04-17 20:29:50

相關問題