正则表达式

正则表达式 它是给计算机读取的一个规则

引入下

要把str中的数字 提取出来放进一个数组里边  [123,0,223].
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="Author" content="">
        <meta name="Keywords" content="">
        <meta name="Description" content="">
        <title>Document</title>
        <style type="text/css">
            * {margin: 0; padding: 0;}
            a {text-decoration: none;}
            ul,li {list-style: none;}
            body {font-family: "Microsoft yahei";}
        </style>
    </head>
<body>

<script type="text/javascript">
/*
    只获得数字
    // if(!isNaN(str.charAt(i))){
    //     console.log(str.charAt(i));
    // }

    // if(str.charAt(i) == parseInt(str.charAt(i))){
    //     console.log(str.charAt(i));
    // }

    // if(str.charAt(i)>="0" && str.charAt(i)<="9"){
    //     console.log(str.charAt(i));
    // }
 */

    // 要把str中的数字 提取出来放进一个数组里边  [123,0,223]
    // 常规做法
    var str = "123num0br223d1312e";
    var arr = [];
    // var a = Number("1");
    var res = ""
    for(var i=0;i<str.length;i++){
    // 0 -- 48   9 -- 57
        if(str.charCodeAt(i)>=48 && str.charCodeAt(i)<=57){
            res += str.charAt(i);
            // console.log(res);
        }else{
        //null "" undefined NaN false 0
        //为了 push非空res
            if(res){
                arr.push(res);
                res = "";
            };
        };
    }
    if(res)arr.push(res);
    console.log(arr);

    //  正则
    var pattern = /\d+/g;
    console.log(str.match(pattern));

</script>
</body>
</html>

正则表达式方法

    写法
        var str = "qwe123";
        var pattern = /123/;(推荐使用)
        var pattern = new RegExp(表达式,标识符);
    正则方法
        test()
            匹配到返回true
            匹配不到返回false
        exec()
            匹配到返回一个查找字符相关的数组
            匹配不到返回null

        pattern.test(str);

    字符串方法
        match()
            匹配到返回数组(匹配的项  看是否有标识符g)
        search()
            匹配总是返回匹配到的第一个符合条件的下标
            匹配不到 -1
        replace()
            替换匹配的子表达式

        str.match(pattern);

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="Author" content="">
        <meta name="Keywords" content="">
        <meta name="Description" content="">
        <title>Document</title>
        <style type="text/css">
            * {margin: 0; padding: 0;}
            a {text-decoration: none;}
            ul,li {list-style: none;}
            body {font-family: "Microsoft yahei";}
        </style>
    </head>
<body>

<script type="text/javascript">
    /*

     */
     // test()
     // var str = "string213a2"
     // var pattern = /a/;
     // alert(pattern.test(str));//true

     // exec()
     // var str1 = "box123";
     // var pattern = /box/;
     // console.log(pattern.exec(str1));

     // lastIndex
     /*

         有匹配子项(a)  返回数组的差别

         exec开启了全局 没有匹配完 再次去匹配时 起始索引是上次一的结束索引lastIndex

      */
     // var str = "1232a22a1a1";
     // var pattern = /\d+(a)/g;  //g 全局  标识符
     // console.log(pattern.exec(str));
     // console.log(pattern.lastIndex);//5
     // console.log(pattern.exec(str));
     // console.log(pattern.lastIndex);//8
     // console.log(pattern.exec(str));
     // console.log(pattern.lastIndex);//10
     // console.log(pattern.exec(str));

     // 返回匹配字符
     // var str = "where box a box";
     // var pattern = /box/g;
     // var result;
     // while((result = pattern.exec(str)) != null){
     //    alert(typeof result);//object数组
     // };


     //  match() 返回数组
     //
     // var str = "123s12d34r3";
     // var pattern = /\d+/  //匹配数字一次
     // var pattern1= /\d+/g   //匹配全部数字. g全局
     // console.log(str.match(pattern));
     // console.log(str.match(pattern1));


     // search() 返回查找字符的下标  没有 返回-1
     // var str = "box1230";
     // var pattern = /12/;
     // var pattern2 = /a/;
     // console.log(str.search(pattern));//3
     // console.log(str.search(pattern2));//-1

     //replace()
     var str = "box1,box2,box3";
     var pattern = /box/g;  //被替换的字符
     console.log(str);
     console.log(str.replace(pattern,function(){
        return "RegExp"; //替换的字符
     }));
</script>
</body>
</html>

标识符 元字符 锚点 转义字符

        标识符
            g   global全局匹配 匹配全部
            i   ignore忽略大小写

        锚点
            ^   开头  [^]代表非
            $   结尾

        转义字符
            \
            \r  回车
            \n  换行
            \t  tab制表符

        元字符
            \d  数字               [0-9]
            \D  非数字             [^\d]
            \w  字母数字下划线     [a-zA-Z0-9_]
            \W  非字母数字下划线
            \s  空格 tab
            \S  非 空格 tab

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="Author" content="">
        <meta name="Keywords" content="">
        <meta name="Description" content="">
        <title>Document</title>
        <style type="text/css">
            * {margin: 0; padding: 0;}
            a {text-decoration: none;}
            ul,li {list-style: none;}
            body {font-family: "Microsoft yahei";}
        </style>
    </head>
<body>

<script type="text/javascript">

         // 转义字符 \
        // var str = "12\\3";//12\3
        // alert(str);

        //  i ==>ignore忽略大小写
        // var str = "ABC";
        // var pattern = /abc/i;
        // alert(pattern.test(str));

        //  \d  数字
        // var str = 'box213as213';
        // var pattern = /\d+/g;
        // var pattern = /[0-9]+/g;
        // var pattern = /\D+/g;
        // var pattern = /[^0-9]+/g;
        // console.log(str.match(pattern));


        //  \w [a-zA-Z0-9_]字母数字下划线
        // var str = "qwe123_";
        // var pattern = /\w/;
        // var pattern = /[a-zA-Z0-9_]/;
        // alert(pattern.test(str));


        // isNaN
        // 判断是不是数字
        // var str = "213123";
        // alert(isNaN(str));
        // var pattern = /\D/;
        // if(!pattern.test(str)){
        //     alert("纯数字");
        // }else{
        //     alert("非纯数字");
        // };

        // ^   开头  [^]代表非    $   结尾
        var str = "box1213box1";
        var pattern = /^\w+\d$/;  //以字母数字下划线开头  ,以数字结尾
        alert(pattern.test(str));
</script>
</body>
</html>

量词

量词
        *        区间[0++]         {0,}
        +        区间[1++]         {1,}
        ?        区间[0,1]        {0,1}
        .        任意个字符
        .*       大于0任意字符
                 [m,n]             {m,n}
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="Author" content="">
        <meta name="Keywords" content="">
        <meta name="Description" content="">
        <title>Document</title>
        <style type="text/css">
            * {margin: 0; padding: 0;}
            a {text-decoration: none;}
            ul,li {list-style: none;}
            body {font-family: "Microsoft yahei";}
        </style>
    </head>
<body>

<script type="text/javascript">

     // var str = "go0gle";
     // var pattern = /go*gle/; //==> /g{0,}gle/;
     // var pattern = /^\wo+gle/; //==> /g{1,}gle/;
     // var pattern = /go?gle/;  //{0,1}
     // alert(pattern.test(str));

     // var str = "goooogle";
     // var pattern = /go*gle/g;  //o可以任意个
     // var pattern = /go{4}gle/g;  //o只可以4个
     // var pattern = /go{4,8}gle/g;  //o只可以4到8个
     // alert(pattern.test(str));

     // var str = "gooo@21321agle";
     // var pattern = /go.*gle/g;  //o后面接任意字符
     // alert(pattern.test(str));
     //


     /*
         贪婪模式    量词 * + {} 量词优先 尽可能多的去匹配
         惰性模式    忽略量词   尽可能少的去匹配
      */
    // var str = "wq2ew2qas_@@12321";
    // // var pattern = /\w+/;
    // var pattern = /\w/g;
    // alert(str.replace(pattern,"prpr"));

    // 惰性模式  忽略量词
    // var str = "wq2ew2qas_@@12321";
    // var pattern = /\w+?/; //值匹配第一个字符
    // alert(str.replace(pattern,"prpr"));

    // 惰性模式开启全局的话
    // var str = "wq2ew2qas_@@12321";
    // var pattern = /\w+?/g; //值匹配每个字符
    // alert(str.replace(pattern,"prpr"));

    //前提条件 都是要匹配成功
    // var str = "box12box345";
    // var pattern = /box\d{3}/;
    // alert(pattern.test(str));

    // var str = "box12boxbox34boxaa";
    // var pattern = /box\d+?boxaa/;
    // alert(pattern.test(str));
</script>
</body>
</html>

子集

    /*
        子集()
            match 有子集的时候第二项返回的第一个子集子集内容 以此类推 第三项返回第二个子集
        |
            或者
     */
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="Author" content="">
        <meta name="Keywords" content="">
        <meta name="Description" content="">
        <title>Document</title>
        <style type="text/css">
            * {margin: 0; padding: 0;}
            a {text-decoration: none;}
            ul,li {list-style: none;}
            body {font-family: "Microsoft yahei";}
        </style>
    </head>
<body>

<script type="text/javascript">
    // var str = "box13box33bo";
    // var pattern = /(box\d+)/;//第二项返回的第一个子集
    // var pattern = /(box)\d+/g;//有全局 不返回
    // console.log(str.match(pattern));


    // var str = "abcd";
    // var pattern = /(a(b(c(d))))/; //匹配abcd ===>返回子集abcd bcd cd d
    // console.log(str.match(pattern));//
    // console.log(str.match(pattern).length);//5

    // 匹配压缩包  rar | zip | 7z
    var str = '2017-4-7.zip';  //. 要转义  \.
    // var pattern = /^[\w-\s-]+\.zip|rar|7z$/;
    var pattern = /^[a-zA-Z0-9_-\s]+\.zip|rar|7z$/;
    alert(pattern.test(str));
</script>
</body>
</html>

* replace*

    /*
        replace用途
        有子集$0 $1 $2 ...
        $0匹配项 $1第一个子集 ...
     */
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="Author" content="">
        <meta name="Keywords" content="">
        <meta name="Description" content="">
        <title>Document</title>
        <style type="text/css">
            * {margin: 0; padding: 0;}
            a {text-decoration: none;}
            ul,li {list-style: none;}
            body {font-family: "Microsoft yahei";}
        </style>
    </head>
<body>

<script type="text/javascript">
    /*
        replace用途
        有子集$0 $1 $2 ...
        $0匹配项 $1第一个子集 ...
     */
    // var str = "google baidu";
    // var pattern = /(.*)\s(.*)/;
    // alert(str.replace(pattern,'$2 $1'));一种写法
    // alert(str.replace(pattern,function($0,$1,$2){
    //     console.log($0);
    //     return $2+" "+$1;
    // }));

    // 删除
    // var str = "abc2017asda2";
    // var pattern = /[\D]+/g;//非数字
    // var pattern = /[^\d]+/g;//非数字
    // console.log(str.replace(pattern,""));

    // 屏蔽辣鸡话
    //
    var str = "你妈mmp,Nmb,sb";
    var pattern = /妈|m.*m.*p|n.*m[\s]*b|s.*b/gi;
    alert(str.replace(pattern,function($0){
        console.log($0);
        return "**";
    }));
</script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值