正则表达式获取图片地址及超链接

最近有这么个需求,要获取图片中的图片地址及超链接地址,有的图片有超链接,有的图片没有,如:

<div id="main">
	<ul>
		<li>
			<a href="http://www.guizhou.gov.cn" style="padding: 10px;"><img src="images/slides/1.jpg" alt="" /></a>
		</li>
		<li>
			<img src="images/slides/2.jpg" alt="" />
		</li>
		<li>
			<a href="http://www.gzylxq.cn/" class=""><img src="images/slides/3.jpg" alt="" /></a>
		</li>
		<li>
			<img src="images/slides/4.jpg" alt="" />
		</li>	
		<li>
			<a href="http://www.gznc.edu.cn" class="last" title=""><img src="images/slides/5.jpg" alt="" /></a>
		</li>					
	</ul>

</div>

采用正则表达式匹配,发现不能一步到位,有超链接的和没有超链接的得分开(可能还有更优的解决方案),先将a标签解析出来,得到:<a href="http://www.guizhou.gov.cn" style="padding: 10px;"><img src="images/slides/1.jpg" alt="" /></a>,通过正则就可以匹配出a标签的href地址和<img src="images/slides/1.jpg" alt="" />,正则再解析就可以得到images/slides/1.jpg,接下来将已经匹配解析的a标签的内容从原始html字符串中替换掉,这样就只剩img标签了,再解析剩下的html字符串就可以得到想要的内容年。

完整代码如下:

<!DOCTYPE html>
<html>
<head>
<title>js正则表达式获取图片地址及超链接</title>
<meta charset="utf-8" />
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head> 

<body> 
<div id="main">
	<ul>
		<li>
			<a href="http://www.guizhou.gov.cn" style="padding: 10px;"><img src="images/slides/1.jpg" alt="" /></a>
		</li>
		<li>
			<img src="images/slides/2.jpg" alt="" />
		</li>
		<li>
			<a href="http://www.gzylxq.cn/" class=""><img src="images/slides/3.jpg" alt="" /></a>
		</li>
		<li>
			<img src="images/slides/4.jpg" alt="" />
		</li>	
		<li>
			<a href="http://www.gznc.edu.cn" class="last" title=""><img src="images/slides/5.jpg" alt="" /></a>
		</li>					
	</ul>

</div>
<script type="text/javascript">

function getImgTargetUrl(htmlstr){
   //定义正则表达式
    var patternTagA = /<a[^>]*href=['"]([^"]*)['"][^>]*>(.*?)<\/a>/gim;
    var patternTagImgSrc = /<img.+?src=('|")?([^'"]+)('|")?(?:\s+|>|\/>)/gim;
    var patternTagImg = /<img [^>]*src=['"]([^'"]+)[^>]*>/gim;
	var imgsrcArr=[];
    
    //解析a标签中的图片
    var tagAImgArr = htmlstr.match(patternTagA);
    console.log(tagAImgArr);
    if(typeof(tagAImgArr)!=undefined && typeof(tagAImgArr)!='undefined' && tagAImgArr!=null){
        for(var i=0;i<tagAImgArr.length;i++){
            var item = patternTagA.exec(tagAImgArr[i]);
            if(typeof(item)!=undefined && typeof(item)!='undefined' && item!=null){
                var imgArr = patternTagImg.exec(item[2])
                if(typeof(item)!=undefined && typeof(item)!='undefined' && item!=null){
                    imgsrcArr.push({
		                ele:item[0],
		                targeturl:item[1],
		                imgurl:imgArr[1]
	                });
	            }
	            //设置lastIndex = 0
                patternTagImg.lastIndex = 0;
	        }
            //设置lastIndex = 0
            patternTagA.lastIndex = 0;
        }
    }
    //将已经解析过的a标签内容过滤掉,继续匹配没有a标签的图片
    var tagImgArr = htmlstr.replace(patternTagA,"").match(patternTagImg);
    if(typeof(tagImgArr)!=undefined && typeof(tagImgArr)!='undefined' && tagImgArr!=null){
        for(var j=0;j<tagImgArr.length;j++){
            var item = patternTagImg.exec(tagImgArr[j]);
            if(typeof(item)!=undefined && typeof(item)!='undefined' && item!=null){
                imgsrcArr.push({
		            ele:"",
		            targeturl:"",
		            imgurl:item[1]
                });
            }
            //设置lastIndex = 0
            patternTagImg.lastIndex = 0;
        }
    }
    console.log("imgsrcArr:",imgsrcArr);
    return imgsrcArr;
}
getImgTargetUrl($("#main").html());
</script>
</body> 
</html>




最终解析出来的数据如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值