• 正则笔记


        //匹配连续数字
        var n = "1234567876543293632817636547218276365411028324365";//匹配最少3连续数字
        console.info(n.match(/(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9))d{2}|(?:(9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)))+d{2}/g));
    
        //数值型正则匹配(分析:符号>整形>小数>科学计数法)
        var a='-123.321e1';
        console.info(a.match(/^(-?)(0|[1-9]d*)(.d+)?([eE][-+]?d+)?$/));
    
        //match:如果是全局匹配,那么是不支持分组的(查看不到分组信息);另外一般来说g和^ $是互斥的
        var aa0='1000@qq.com,2000@163.com,3000@qq.com';
        //["1000@qq.com", "1000", index: 0, input: "1000@qq.com,2000@163.com,3000@qq.com"],可以看到分组信息里的qq号码,但不是全局的,只有一条邮箱信息
        console.info(aa0.match(/(d+)@qq.com/));
        //["1000@qq.com", "3000@qq.com"],匹配了所有的邮箱,但是却不能查看分组信息qq号码
        console.info(aa0.match(/(d+)@qq.com/g));
    
        //RegExp:exec 支持同时使用全局和分组,虽然写了g但是默认情况下每次只查找一个
        var reg=new RegExp(/(d+)@qq.com/g);
        //每次开始执行的索引值会保存到lastIndex上
        //console.info(reg.lastIndex);
        //console.info(reg.exec(aa0));
        //console.info(reg.lastIndex);
        //console.info(reg.exec(aa0));
        //console.info(reg.lastIndex);
        while(result=reg.exec(aa0)){//result是一个数组,result[0]是匹配结果,result[1]是分组一的结果
            //QQ邮箱账号:1000@qq.com,QQ号:1000
            //QQ邮箱账号:3000@qq.com,QQ号:3000
            console.info("QQ邮箱账号:"+result[0]+','+"QQ号:"+result[1])
        }
    
        //匹配ip 包含(0.0.0.0 255.255.255.255)
        //0-9 10-99 100-199 200-249 250-255
        //d  [1-9]d 1d{2} 2[0-4]d 25[0-5]
        //前面两个合并 [1-9]?d,另外注意最后面两个的分段,为什么不是200-255(2[0-5]{2})分段,因为这样匹配不到像2[0-4][6-9]这样的数字
        //(?:)小括号中的?:表示该分组不再进行单独匹配
        var aa1='192.168.1.1';
        console.info(aa1.match(/^(?:(?:25[0-5]|2[0-4]d|1d{2}|[1-9]?d).){3}(?:25[0-5]|2[0-4]d|1d{2}|[1-9]?d)$/));
    
        //贪婪和懒惰
        //默认在匹配时候是贪婪模式,通过在匹配次数修饰符(*|?|+|{1,})后面添加?号可以改成懒惰模式(懒惰模式是在匹配成功的情况下尽可能少的匹配,不是不匹配)
        var aa2='httpserver';
        console.info(aa2.match(/https?(erver)?/));//httpserver
        console.info(aa2.match(/https??(erver)?/));//http
    
        //自定义匹配符[],如果是[^]表示取反
        var aa3='12345678910';
        alert(aa3.match(/1[2345]d{9}/)); //12,[]中是单个字符匹配,相当于(2|3|4|5)
        var aa33='<img src="http://test.com/upload/2015/gg/test.jpg" alt="test" />';
        console.info(aa33.match(/http:[^"]+/));//获取不是引号的所有字符匹配+次
    
        //写表达式的时候先通过正常的格式来写表达式,特殊情况则分为多个部分,部分解决
        var aa4='<img src="src/images/addData.png" />';
        console.info(aa4.match(/<imgs+src=".+.(png|jpe?g|gif)".+/>/));
        aa4="<img alt='hello' src='src/images/addData.png' class='world'/>";
        console.info(aa4.match(/<img.+src=["'].+["'].+[/]?>/));
        aa4='<IMG alt="hello" SRC=src/images/addData.png>';
        console.info(aa4.match(/<img.+src=["']?.+["']?.*[/]?>/i));
        aa4='图片1:<img src="src/images/addData.png"/> 图片2:<img alt="hello" src="src/images/addData.png" class="world"/> 图片3:<IMG alt="hello" SRC="src/images/addData.png" class="world">';
        console.info(aa4.match(/<img.+?src=["']?.+?["']?.*?[/]?>/ig));
    
        //匹配标签元素
        var aa5='12121<b>1212</b>11111<link rel="stylesheet" href=""/> <p>3333</p>1212<br/>1212<b>1212</b><a name=n value=">">...</a>22223<p>3333</p>1212<br/>1212'
        console.info(aa5.match(/(<[^>]+/>)|<[^>]+>.+?<[^>]+>/g));
    
        //(?=xx)匹配后面是xx的前面正则匹配内容和(?!=xx) 相反
        var aa6 = "123456789";
        console.info(ccc.replace(/(d{3})(?=.)/g,"$1,")); //123,456,789
    

      

  • 相关阅读:
    .OBJ est1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
    线程详细剖析(四)
    线程详细剖析(三)
    线程详细剖析(二)
    线程详细剖析(一)
    CAN总线相关的几个gitlab代码
    进程详细剖析(三)
    C++实现多级排序
    C/C++读写二进制文件
    C++11新特性
  • 原文地址:https://www.cnblogs.com/leyi/p/6290825.html
Copyright © 2020-2023  润新知