2013-08-16 21 views
2

我已經使用以下正則表達式中的進料來搜索圖像中標記:正則表達式的圖像

var str=items.item(i).getElementsByTagName("content:encoded").item(0).text; 
var patt1=/([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))/i 
var urlMatch = str.match(patt1); 

我然後打印到控制檯urlMatch [0],urlMatch [1]和urlMatch [2]以下標記中:

<![CDATA[ 
<p><a href="http://www.highlandradio.com/wp-content/uploads/2013/08/Emergency.jpg"><img class="alignleft size-thumbnail wp-image-56646" alt="Emergency" src="http://www.highlandradio.com/wp-content/uploads/2013/08/Emergency-150x150.jpg" width="150" height="150" /></a></p> <p><strong>The HSE has confi 
]]> 

這分別返回以下3個結果:

http://www.highlandradio.com/wp-content/uploads/2013/08/Emergency.jpg, 
http://www.highlandradio.com/wp-content/uploads/2013/08/Emergency.jpg, 
jpg. 

有人可以向我解釋發生了什麼事嗎?爲什麼我沒有得到150x150這個名字?這是我需要的。感謝您的幫助提前

回答

2

你越來越多組的第一場比賽,而不是多個匹配。這意味着,urlMatch[0]是匹配,urlMatch[1]是第一捕獲組(第一組括號,與整個匹配順帶相同的),和urlMatch[2]是在圖案中的第二組括號(您已圍繞文件擴展包裹) 。

您需要使用全球g標誌:

var patt1=/([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))/ig; 
var urlMatch = str.match(patt1); 

,導致:

[ 
    "http://www.highlandradio.com/wp-content/uploads/2013/08/Emergency.jpg", 
    "http://www.highlandradio.com/wp-content/uploads/2013/08/Emergency-150x150.jpg" 
] 

如果需要捕獲組(除了所有的結果),你就會有使用RegExp.exec()

如果不是,您可以使用非捕獲組來提高性能。請注意,在任何情況下您都不需要使用外部圓括號,因此無論如何您都可以離開。使用非捕獲組,這將是這樣的:

var patt1 = /[a-z\-_0-9´\/:.]*\.(?:jpg|jpeg|png|gif)/ig;