Javascript正则表达式全部匹配

javascript regular expression match all

本文关键字:全部 正则表达式 Javascript      更新时间:2023-09-26

有一个类似

的字符串
<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);

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

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

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

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

你不匹配的"或>,也许它有帮助吗?

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

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

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

如果你使用'。'而不是'^">',正则表达式可能跨越几个标签。

您还需要使用_arrMatches[1]而不是_arrMatches[2]来获取完整路径