正则笔记

Posted 韭菜茄子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则笔记相关的知识,希望对你有一定的参考价值。

    //数值型正则匹配(分析:符号>整形>小数>科学计数法)
    var a=‘-123.321e1‘;
    console.info(a.match(/^(-?)(0|[1-9]\d*)(\.\d+)?([eE][-+]?\d+)?$/));

    //match:如果是全局匹配,那么是不支持分组的(查看不到分组信息);另外一般来说g和^ $是互斥的
    var aa0=‘[email protected],[email protected],[email protected]‘;
    //["[email protected]", "1000", index: 0, input: "[email protected],[email protected],[email protected]"],可以看到分组信息里的qq号码,但不是全局的,只有一条邮箱信息
    console.info(aa0.match(/(\d+)@qq.com/));
    //["[email protected]", "[email protected]"],匹配了所有的邮箱,但是却不能查看分组信息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邮箱账号:[email protected],QQ号:1000
        //QQ邮箱账号:[email protected],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 1\d{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|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{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 aa4=‘<img src="src/images/addData.png" />‘;
    console.info(aa4.match(/<img\s+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));

  

以上是关于正则笔记的主要内容,如果未能解决你的问题,请参考以下文章

通过 Java 正则表达式提取 semver 版本字符串的片段

学习笔记:python3,代码片段(2017)

text 正则表达式片段

markdown 正则表达式模式片段

javascript学习笔记-正则表达式-少写1000行代码的正则表达式

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性