zoukankan      html  css  js  c++  java
  • 正则表达式

    正则表达式的概念:我们在处理数据的时候,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的语法。

    正则表达式的主要作用是分割、匹配、查找、替换。

    正则表达式不仅可以帮助我们完成一些通过函数无法实现的工作,还可以帮助我们减轻很多工作量。

    正则表达式的定义方法:方式一:/规则/匹配成功返回TRUE ,

               方式二:new RegExp(字符串);

    1  var str = "一统大业123满城风絮456";
    2 
    3 
    4     var r = /123/;
    5 
    6     var reg = new RegExp("123");
    7 
    8     alert(r.test(str))    //弹窗为TRUE
    9     //alert(reg.test(str))

    为转译符号

    特殊字符:

    特殊字符
        *
        *       
      
     	
        *
        *       d  数字
        *       D  非数字
        *       s  空格
        *       S  非空格
        *       w  字符(数字、字母、_)
        *       W  非字符(不是w的都是匹配内容)
        *
        *         单词边界   起始  结束  连词符(除了w  其他的都属于连词符)  (独立的部分)
        *       B  非独立部分

    量词:满足匹配规则字符的数量。reg=/1{1,5}/匹配最少1次最多5次,如果有5次则匹配5次。默认为贪婪匹配

    有几种特殊写法
    * {0,1}      ? 最少0次 最多1次
    * {1,}    + 最少1次 最多无限
    * {0,}   * 不限制,可以任意次

    贪婪匹配和非贪婪匹配
      * 贪婪匹配会先以最多的次数来进行匹配
      * 例如:
      * "11111222333".replace(/1{4,6}?/,"A")
      输出:"A222333"

      非贪婪匹配
        写法 量词? {}?
        以量词里最少次数开始匹配

    范围词【】:

     1 var str = "aAbBcC"; 2 var reg = /[A-Z]/g; 3 console.log(str.match(reg)) 

    标识符:

    * g global 全局
    * i ignore case 不区分大小写
    * m multiline 换行匹配
    *
    * 写在第二个/后面

    子集:

     1    /*
     2     *
     3     *       ()
     4     *       子集  一个整体
     5     *
     6     *       {}如果量词前面不是子集那么只管前面一个字符
     7     *
     8     * */
     9 
    10 
    11     var str = "12121212";
    12 
    13     var reg = /(12){2,5}/g;
    14 
    15 
    16     console.log(str.match(reg))

    str.match()的使用:返回一个数组,包含着匹配内容的一个数组,如果匹配不成功就是返回null,返回的是null,而不是空数组。

    ps:Array.isArray(检测对象)判断一个对象是不是数组是 返回 true不是 返回 false

     1  var reg = /222/;
     2 
     3 
     4     var str = "方当111";
     5 
     6     var arr = str.match(reg);
     7 
     8 
     9     console.log(arr);
    10 
    11 
    12     alert(Array.isArray(arr));

    回顾:

     1 回顾:
     2     *
     3     *   特殊字符
     4     *         /  {}  ()  []  +  ?  *   {}?  +?  *?  ??  |
     5     *
     6     *
     7     *   元字符
     8     *       d   数字
     9     *       w   字符(字母,数字,_)
    10     *       s   空格
    11     *          单词边界  独立部分  连词符(除了w以外的都是)
    12     *
    13     *      给上面对应的取反
    14     *       D
    15     *       W
    16     *       S
    17     *       B
    18     *
    19     *   标识
    20     *       g   全局
    21     *       m   换行匹配
    22     *       i   不区分大小写
    23     *
    24     *
    25     *   str.match(reg)
    26     *       把正则匹配的内容,返回一个新的数组
    27     *
    28     *
    29     *   reg.test(str)
    30     *       在str去匹配reg的规则,有则返回 true   没有就返回false
    31     *
    32     *   str.replace(reg,str2(function))
    33     *       第二个参数如果是str
    34     *           则把正则匹配的部分替换为str2
    View Code

    replace:

     1   replace()    除了可以是字符串,还可以是function
     2     *
     3     *          正则没有子集的时候:
     4         *           第二个参数是函数的函数的时候
     5         *               函数的第一个形参
     6         *                   正则匹配到的内容
     7         *               第二个形参:
     8         *                   是每次匹配到的结果对应的索引
     9         *               第三个形参:
    10         *                   是正则匹配的目标str本身
    11     *
    12     *
    13     *
    14     *           如果正则里有子集的时候:
    15     *               函数的第一个参数:
    16     *                   是正则每次匹配到的内容
    17     *               第二个参数
    18     *                   对应第一个子集
    19     *               第三个
    20     *                   对应第二个子集
    21     *               以此类推
    22     *
    23     *               最后一个参数
    24     *                   是每次匹配的内容在目标字符串里的下标

      

     1  var str = "A1A1A1A1";
     2 
     3     var reg = /(A1)/g;
     4 
     5     var a = str.replace(reg,function (a,b,c) {
     6         console.log(b);
     7         console.log(c);
     8         return a+"X";
     9         
    10     });
    11 
    12 
    13     console.log(a)
    14     console.log(str)

    案例:

    1.用正则过滤脏字:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="Author" content="FengYu">
        <title>Tz-34期Js</title>
        <style>
            *{margin:0;padding:0;font-family: Microsoft YaHei,serif;}
            li{list-style: none;}
            .time{
                display: block;
                color:#999;
            }
        </style>
        <script src="https://git.oschina.net/cx-fy/personal/raw/master/conmenu.js"></script>
    </head>
    <body>
    <input type="text" id="input">
    <input type="button" id="btn" value="发送">
    <ul>
        <!--<li><span class="time">22:00</span><span class="txt">傻逼</span></li>-->
    </ul>
    
    <script>
        
        var inp1 = document.getElementById("input"),
            btn = document.getElementById("btn"),
            oUl = document.getElementsByTagName("ul")[0],
            reg = /傻.{0,3}逼/;
            
            
            btn.onclick=function () {
                var val = inp1.value;
                if(val){
                    val = val.replace(reg,function (a) {
                        var str = "";
                        for(var i=0,length=a.length;i<length;i++){
                            str += "*";
                        }
                        return str;
                    });
    
                    var data = new Date(),
                        //获取时分秒
                        hh = data.getHours(),
                        mm = data.getMinutes(),
                        ss = data.getSeconds();
    
                    //给时分秒加上0
                    hh = addZero(hh);
                    mm = addZero(mm);
                    ss = addZero(ss);
    
                    var timer = hh+":"+mm+":"+ss;
    
                    var oLi = document.createElement("li");
                        oLi.innerHTML = '<span class="time">'+timer+'</span><span class="txt">'+val+'</span>'
    
                    oUl.appendChild(oLi);
                    inp1.value = "";
                }
    
    
            };
    
    
            function addZero(n) {
                return n<10?"0"+n:n+"";
            }
    
    </script>
    </body>
    </html>
    View Code

    2.商用正则表达式:

     1 var reg = {
     2         qq : /^[1-9]d{4,9}$/,   //匹配qq号
     3         pwd : /^[w!@#$%^&*[](){}\/-.]{6,20}$/,  //密码
     4         user : /^[a-zA-Z_]w{5,17}$/,  //用户名
     5         email : /^[1-9a-zA-Z]w{5,17}@[1-9a-z]{2,7}.[a-z]{2,4}$/,  //电子邮箱
     6         tel : /^1[3-8]d{9}$/,  //手机号
     7         idCard : /^[1-9]d{5}[12][90]d{2}[01]d[0-3]dd{3}[dxX]$/,  //身份证
     8         url : /^(http|https)://[^@S]*$/   //网址
     9     };
    10 
    11     var str = "http://www.baidu.com/@";
    12     alert(reg.url.test(str))
  • 相关阅读:
    浅析值类型与引用类型的内存分配[转载]
    C#引用类型参数,ref按引用传值
    java调用WebService的例子
    poj 2727 Expectation
    IT O
    Android_notepadz
    tomcat mysql 数据源
    android_snakez
    Tomcat下配置ssl
    Android_Hello Worldz
  • 原文地址:https://www.cnblogs.com/letgo-doo/p/8795219.html
Copyright © 2011-2022 走看看