2013-05-07 53 views
2

有像JavaScript的正則表達式匹配所有

<img src="images/_attachments/07-08.jpg" style="width: 520px; height: 693px;" /><img src="images/_attachments/09-11.jpg" style="width: 520px; height: 693px;" /> 

字符串我想獲得的圖像路徑'images/_attachments/07-08.jpg''images/_attachments/09-11.jpg'和文件名'07-08.jpg''09-11.jpg'與正則表達式的JavaScript。

所以我喜歡代碼

var str='<img src="images/_attachments/07-08.jpg" style="width: 520px; height: 693px;" /><img src="images/_attachments/09-11.jpg" style="width: 520px; height: 693px;" />' 
var strPattern=new RegExp('<img.*?src="(.*\/(.*?))".*?>', 'g'); 
var arrMatch=new Array(); 
var strHTML=''; 

while(arrMatches=_strPattern.exec(str)){ 
    strHTML+='<div>'+arrMatches[2]+'</div>'; 
} 

$('body').html(strHTML); 

,但我得到的是路徑,而不是文件名,如何解決這個問題?

+0

你需要爲它製作另一個圖案 – Eru 2013-05-07 14:19:32

回答

1

你的路徑匹配是貪婪的,所以你不會得到想要的文件名稱的結果。如果你使它不那麼貪婪,它只會匹配images/,所以你需要把它加倍或者讓你的文件名匹配器不包含斜線。改變你的模式

var strPattern=new RegExp('<img.*?src="(.*?\/([^/"]*))".*?>', 'g'); 
//          ^

順便說一句,一個正則表達式文字看起來會更好。

+0

對不起,我試試這個,它仍然顯示'images/_attachments/07-08.jpg',而不是07-08.jpg! – Jana 2013-05-07 14:25:55

+0

啊,我明白了。現在也解決了。 – Bergi 2013-05-07 14:29:33

+0

謝謝!有用!! – Jana 2013-05-07 14:31:12

1

有了這個,你不匹配「或>,也許它可以幫助

var strPattern=new RegExp('<img [^>]*src="([^>"]+\/([^>"]+))"[^>]*?>', 'g'); 
+0

感謝您的幫助,這種模式效果很好! – Jana 2013-05-07 14:32:04

1

使用此模式來匹配屬性內容:

_strPattern=new RegExp('<img.*?src="([^">]*\/([^">]*?))".*?>', 'g'); 

我你用‘’而不是'^「>,正則表達式可能會跨越幾個標籤。

您還需要使用_arrMatches[1]而不是_arrMatches[2]才能獲得完整路徑。