javascript正则表达式匹配所有

时间:2013-05-07 14:16:50

标签: javascript regex

有一个像

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

我想在javascript中使用正则表达式获取图片路径'images/_attachments/07-08.jpg''images/_attachments/09-11.jpg'和文件名'07-08.jpg''09-11.jpg'

所以我编码像

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);

但我得到的只是路径,而不是文件名,我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您的路径匹配是贪婪的,因此您无法获得所需的文件名结果。如果你使它非贪婪,它只会匹配images/,所以你需要加倍它或使你的文件名匹配器不包括斜杠。将您的模式更改为

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

顺便说一下,正则表达式文字/<img.*?src="(.*?\/([^\/"]*))".*?>/g看起来会更好。

答案 1 :(得分:1)

有了这个你不匹配“或&gt;,也许它有帮助?

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

答案 2 :(得分:1)

使用此模式匹配属性内容:

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

我用'。'而不是'^“&gt;',正则表达式可能会跨越几个标签。

您还需要使用_arrMatches[1]代替_arrMatches[2]来获取完整路径。

相关问题