如何把一段字符串中的有规律信息转为对象数组?

比如我有一个变量content,
里面是字符串:

<p><a href="http://www.baidu.com" target="_self"><img src="/wzomifiles/ftpfile/pic/2016/09/30/84e228e30f8d404ea7972eee988567e4.JPEG" title="84e228e30f8d404ea7972eee988567e4.JPEG"/></a></p><p><a href="http://www.tengxun.com" target="_self"><img src="/wzomifiles/ftpfile/pic/2016/09/30/a5acfc450c334584aee43e720c8274c1.JPEG" title="a5acfc450c334584aee43e720c8274c1.JPEG"/></a></p>

我想吧每个p标签(段落)里的href值,src值提取出来变成一个对象,如果有多个P标签,就把提取出的内容变成个对象数组,比如变成这样:

[{
href:"http://www.baidu.com",
src:"/wzomifiles/ftpfile/pic/2016/09/30/84e228e30f8d404ea7972eee988567e4.JPEG"
},{
href:"http://www.tengxun.com",
src:"/wzomifiles/ftpfile/pic/2016/09/30/84e228e30f8d404ea7972eee988567e1.JPEG"
}]

我该怎么写方法呢?新手求教,还没学习正则,规则看的有点晕,实在写不出来,能否给出以上需求的实例代码,非常感谢!

阅读 3.9k
5 个回答
function contentParse(str) {
  var sr = /<\/p><p>/;
  var arr = str.split(sr);
  var r = [];
  for (var i = 0; i < arr.length; i++) {
    r.push({
      href: arr[i].match(/href="(.+?)"/)[1],
      src: arr[i].match(/src="(.+?)"/)[1]
    });
  }
  return r;
}

RegExpObject.exec(string)

楼上的办法挺妙,顶一个,一下子还真没想到。我第一反应是用split("<p>")先分成数组,然后慢慢提取

使用正则是最好的办法,正则匹配中定义好对应的Group名字,匹配完后直接拿到这个组的数据,也就是要求的数据。

正则:

[href="|src="][\s\S\d]*"
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <p>
        <a href="http://www.baidu.com" target="_self">
            <img src="/wzomifiles/ftpfile/pic/2016/09/30/84e228e30f8d404ea7972eee988567e4.JPEG" title="84e228e30f8d404ea7972eee988567e4.JPEG"/>    
        </a>
    </p>
    <p>
        <a href="http://www.tengxun.com" target="_self">
            <img src="/wzomifiles/ftpfile/pic/2016/09/30/a5acfc450c334584aee43e720c8274c1.JPEG" title="a5acfc450c334584aee43e720c8274c1.JPEG"/>    
        </a>
    </p>
</body>
<script>
    var arr=new Array();
    var p=document.getElementsByTagName('p');
    for(var i=0;i<p.length;i++){
        arr[i]={};
        var a=p[i].getElementsByTagName('a');
        arr[i]['href']=a[0].href;
        for(var j=0;j<a.length;j++){
            var img=a[j].getElementsByTagName('img')
            arr[i]['src']=img[0].src;
        }
    }
    console.log(arr);
</script>
</html>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题