有一个像
这样的字符串<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);
但我得到的只是路径,而不是文件名,我该如何解决这个问题?
答案 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]
来获取完整路径。