zoukankan      html  css  js  c++  java
  • js正则表达式详解及示例讲解

    所谓正则表达式,简单来说就是一种规则,一种计算机能读懂的规则。js中的正则表达式语法是Perl5(一种很早的编程语言)的正则语法的子集。本文将在基础知识的基础上添加示例帮助快速理解正则表达式。

    学习正则要对字符串以及字符串的函数非常了解,在此不多赘述,了解字符串可见另一篇文章,链接:http://www.cnblogs.com/pomelott/p/6567618.html

    1.正则表达式的创建方法

        1.1 var reg=new RegExp(表达式,修饰符)

        1.2 var reg=/表达式/修饰符

    2.正则表达式的字符类(可表示一类字符)

    [...]      方括号内的任意一个字符(记住是一个)

    [^...]     不是方括号内的任意字符

    [a|b]       a或b,只能是一个

    w                   任何ASCII字符,等价于[0-9a-zA-Z_]

    w                   任何不是ASCII字符组成的单词,等价于[^0-9a-zA-Z]

    d                   任何数字,等价于[0-9]

    D                   任何非ASCII编码数字,等价于[^0-9]

    s                    任何Unicode空白符

    S                   任何非Unicode空白符

    .                      换行符和和其他Unicode行终止符之外的任意字符

    []                 退格直接量

        var str="aSsdAeffa";
        var reg=/a/ig;              //i为ignore(忽略大小写)  g为global(全局匹配) ig顺序可调换
        console.log(typeof reg);       //Object  正则表达式是一个对象,而不是字符串。new RegExp()在内部也同样利用第一个参数的字符串创建一个正则对象
        console.log(reg.test(str));    //true   注意这是正则自带的方法,而不是字符串
        console.log(str.match(reg));    //["a", "A", "a"]   全局不区分大小写 ,返回数组
        var str2="afds15d dw";
        var reg2=/d/g;
        var reg3=/wd/;
        console.log(str2.search(reg2));   //4
        console.log(str2.search(reg3));   //3   寻早一个字符在前数字在后的组合

    3. 修饰符

    i             ignore忽略大小写进行匹配

    g           global进行全局匹配

    m          多行匹配,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束

        var str3="AsadwAPoamelOtT";
        var reg4=/a/;
        var reg5=/a/i;
        var reg6=/a/g;
        var reg7=/a/gi;
        console.log(str3.match(reg4));   //["a", index: 2, input: "AsadwAPoamelOtT"]
        console.log(str3.match(reg5));   //["A", index: 0, input: "AsadwAPoamelOtT"]
        console.log(str3.match(reg6));   //["a", "a"]
        console.log(str3.match(reg7));   //["A", "a", "A", "a"]

    4. 量词,修饰前一个字符

    {n,m}         n-m此

    {n,}            大于等于n次

    {,m}           小于等于m次

    ?                  0次或一次,等价于{0,1}

    +                 一次或多次,等价于{1,}

    *                 匹配前一项0次或多次,等价于{0,}

          var str4="saf_344 fa4f66gp 9a";
          var reg8=/d+/g;
          var reg9=/dd/g;
          var reg10=/d{2,}/g;
          var reg11=/d/g;
          console.log(str4.match(reg8));    //["344", "4", "66", "9"]
          console.log(str4.match(reg9));    //["34", "66"]
          console.log(str4.match(reg10));    //["344", "66"]
          console.log(str4.match(reg11));    //["3", "4", "4", "4", "6", "6", "9"]

    5. 锚字符

    ^            匹配一行的开头

    $            匹配一行的结尾

              单词边界,意为w与w之间的位置,或者位于字符w与字符串的开头挥着结尾之间的位置

    B          匹配非单词边界

    平时不带^和$的正则表达式匹配的是包含符合正则规则的,而加了^和$的表达式匹配的是完全符合正则规则的。

    例:邮箱验证

            var str5="pomelott@163.com";
            var str6="pomelo163.com";
            var str7="pomelo@163com";
            var reg12=/^w+@w+.[a-z]{2,4}$/;
            console.log(reg12.test(str5));      //true
            console.log(reg12.test(str6));      //false
            console.log(reg12.test(str7));      //false

    6.选择

    6.1   /a|b/   匹配a部分或者b部分

              var reg13=/a|b/g;
              var str8="adfsbrsar";
              console.log(str8.match(reg13));    //["a", "b", "a"]

    6.2  /..[a|b]../    匹配a或者b

                var reg14=/da|bd/g;
                var reg15=/d[a|b]d/g;
                var str9="4fd4a6e5b55";
                console.log(str9.match(reg14));   //["4a", "b5"]
                console.log(str9.match(reg15));   //["4a6", "5b5"]

    例:去掉行首或者行尾的空格

                var reg16=/^s+|s+$/g;
                var str10=" pomelo tt   ";
                console.log(str10.replace(reg16,""));     //pomelo tt

    6.3 分组()  将括号内的当成整体来操作,可以用*,+,?,|进行整体修饰

                var str11="java";
                var str12="javascript";
                var reg17=/java(script)?/;     //script可以有也可以没有
                console.log(reg17.test(str11));
                console.log(reg17.test(str12));
                var reg18=/(ab|cd)+|ef/;    //用于匹配存在 一个或多个(ab或cd)或一个ef 的字符串

    最后再附上两个例子:

    例1.敏感词过滤:我们在游戏中经常看到的***

        var reg19=/fuck|草|日/g;
        var str13="fuck!真实日了狗了!";
        console.log(str13.replace(reg19,"*"));   //*!真实*了狗了!

    例2. 检测中文:

        var reg20=/[u4e00-u9fa5]/g;    //u为Unicode编码  4e00-9fa5 为数字编码范围
        var str14="pomelo忒忒,wo是qianduan程序员";
        console.log(str14.match(reg20));   //["忒", "忒", "是", "程", "序", "员"]
  • 相关阅读:
    带你玩转Flink流批一体分布式实时处理引擎
    都2022年了,你的前端工具集应该有vueuse
    云图说|图解DGC:基于华为智能数据湖解决方案的一体化数据治理平台
    面试官: Flink双流JOIN了解吗? 简单说说其实现原理
    4种Spring Boot 实现通用 Auth 认证方式
    这8个JS 新功能,你应该去尝试一下
    Scrum Master需要具备哪些能力和经验
    dart系列之:时间你慢点走,我要在dart中抓住你
    dart系列之:数学什么的就是小意思,看我dart如何玩转它
    dart系列之:还在为编码解码而烦恼吗?用dart试试
  • 原文地址:https://www.cnblogs.com/pomelott/p/6597021.html
Copyright © 2011-2022 走看看