zoukankan      html  css  js  c++  java
  • js 获取页面内链接

    今天有同学问如何用 JS 正则表达式获取一段文本中的超链接,并对超链接进行处理,想了几分钟,写了下面的代码:

    var re = /https?://[w.:~-d/]+(?:?[wd-_&=%]+)?(?:#[^s]+)?/i;

    这个正则表达式处理这种类型的URL:

    protocol://host:port/path?param=value#xxoo

    想法是好的,但总要测试通过才可以,随即又写了一段获取页面内所有带有 src, href 属性的代码:

    function getGoodUrls() {
        var slice = [].slice, srcs, hrefs, links, hasAsk;
        hasAsk = function(url){
            return url ? (url.indexOf('http') === 0 && url.indexOf('?') > -1) : false;
        };
        srcs = slice.call(document.querySelectorAll('[src]'), 0);
        srcs = srcs.map(function(dom){ return dom.src; }).filter(hasAsk);
        hrefs = slice.call(document.querySelectorAll('[href]'), 0);
        hrefs = hrefs.map(function(dom){ return dom.href; }).filter(hasAsk);
        links = srcs.concat(hrefs);
        return links
    }

    ok,开测:

    links.forEach(function(s){
      //加上中文看中文会不会被选中 s
    = s + '发大家看法'; console.log('%cbefore: ' + s, 'color:red;') console.log('%cafter: ' + s.replace(re, function(href){ return '<a href="' + href + '"><img/></a>'; }), 'color: green'); });


    结果,多数URL都还是通过了的,也有少部分无法通过,比如像:http://xx.oo?next=http://oo.xx
    不过这个不算特别常见,暂时就算了,以后要用到再修改

  • 相关阅读:
    css中position的两种定位(absolute、relative)
    C# 如何转换生成长整型的时间
    C# 如何转换生成长整型的时间
    C# 如何转换生成长整型的时间
    easyui dialog的一个小坑
    easyui dialog的一个小坑
    ACM2027
    [VUE]关于路由哪些事儿
    hexo+github
    我们一起学React Native(一):环境配置
  • 原文地址:https://www.cnblogs.com/aaronzhang/p/4491498.html
Copyright © 2011-2022 走看看