• JavaScript正则表达式


    创建正则表达式

    使用字面量形式创建:

    var pattern = /pattern/g || i || m;

    /pattern/:两个反斜杠里面是你要匹配的规则。

    g:匹配所有字符,而非发现第一个匹配项时立即停止。

    i:不区分大小写。

    m:多行匹配。 当在字符串使用 换行,但在正则中还是把它看成一行进行匹配,如下代码匹配以a开头的字符,使用 后应该是配到2个以a开头的字符,但是只匹配到一个a.当加上m使用多行匹配,就可以匹配到两个以a开头的字符。

    var str = "abcde
    af";
    var reg = /^a/gm;
    str.match(reg);  //match返回匹配结果的数组。 不加 m["a"],加 m["a","a"];

     g,i,m可以任意搭配。

    使用构造函数创建:

    var pattern = new RegExp("pattern","i||g||m");

    接收两个字符串参数,第一个是要匹配的字符串模式,第二个是i||m||g.

    表达式:

    表达式放在[]里,一个[]代表一个位置,[]里面的内容表这个位置的可选范围。

    [^abc]:匹配不包含a或b或c的任意字符。

    [0-9]:匹配0-9的数字。

    [A-z]:匹配所有的大小写英文字母。

    (red|blue|green):匹配连续的字符。

    如下,字符串只要包含[]里面的任意一个字符,就可以被匹配出来。

    var reg = /[123][0-9A-z]/g;
    var str = '1asdf3cs';
    var arr = str.match(reg);   //["1a","3c"]

     var reg = /(red|bac)[0-9]/g;
     var str = '123red123bac123';
     var arr = str.match(reg);   //["red1","bac1"]
     

    元字符:

    每个元字符代表一个位置。元字符可以放在表达式里

    w:匹配所有0-9,A-z _(下划线)的任意字符。 相当于表达式的[0-9A-z_]

    W:^w(w的取非).  [^w]

    var reg = /wabc/g;
    var str = '_abcd123abcd';
    var arr = str.match(reg);  //["_abc", "3abc"]

    d:配到0-9  [0-9]

    D:对取非  [^0-9]

    var reg = /dabc/g;
    var str = '1abc2abcdef123';
    ar arr = str.match(reg);   //["1abc","2abc"]

    s:匹配空白字符

    S:取非

    var reg = /sw/g;
    var str = ' a d c';
    var arr = str.match(reg);   //[" a", " d", " c"]

    :匹配单词边界

    B:匹配非单词边界

    var reg = /world/g;  
    var str = 'hello world hello';
    var arr = str.match(reg);  //["hello"]

     var reg = /worldB/g;
     var str = 'hello world_hello';
     var arr = str.match(reg);  //["hello"]

    量词   遵循贪婪原则,取多不取少

    n+: 匹配至少包含一个n的字符

    var reg = /w+/g;  
    var str = 'hello world_hello';
    var arr = str.match(reg);   
    console.log(arr);    //["hello","world_hello"];

     n*:匹配至少0个或多个n的字符。

    var reg = /w*/g;  
    var str = 'hello world_hello';
    var arr = str.match(reg);
    console.log(arr);  //["hello","","world_hello",""]

    n?:匹配0到1个n的字符

    var reg = /w?/g;  
    var str = 'hello ';
    var arr = str.match(reg);  //["h", "e", "l", "l", "o", "", ""]

    n{X}:匹配x个n的字符

     var reg = /[wW]{3}/g;  
     var str = 'hello world_hello    ';
     var arr = str.match(reg);    ["hel", "lo ", "wor", "ld_", "hel", "lo ", "   "]

    n{x,y}:匹配x到y个n的字符,同样遵循贪婪原则,能匹配y个(多)不匹配少。

    n{x,}:第二个不写就是最少匹配x个,最多匹配无穷个。

    在正则表达式中或者用一个|表示。

    例如:判断字符串首尾有数字

    var reg = /^d|d$/g;  
    var str = '123abd';
    var result = reg.test(str);

    判断字符首尾都有数字

    var reg1 = /^d[dD]*d$/g;  
    var str = '123abc';
    var result = reg.test(str);

    子表达式

    ()放在括号里面的式子叫子表达式,他可以将括号里面匹配后的内容进行保存,因此我们可以反向引用这个匹配后的结果。

    ()1 在括号后面加1表示引用第一个子表达式,第一个括号叫第一个子表达式,第二个括号叫第二个子表达式,以此类推。

    例如匹配型如aaaa类型的字符串

     var reg = /(w)111/g;    //匹配到一个a,将a反向引用,也就是说,1就代表a
     var str = 'aaaa';
     var result = str.match(reg);    ["aaaa"]

    匹配型如aabb类型的字符串

    var reg = /(w)1(w)2/g;  
    var str = 'aabbabaaba';
    var result = str.match(reg);

    RegExp对象方法 

    test()判断字符串是否有规定匹配的片段,有返回true,没有返回false。

    exec()返回一个数组,数组的第一位是第一个匹配的字符串,其他项如果有子表达式就是子表达式匹配的字符串。还有两个额外属性:index(匹配项在字符串中的位置),input(应用正则表达式的字符串)。

    var reg = /(w)1(w)2/g;  
    var str = '123aabb';
    var result = reg.exec(str);  //["aabb", "a", "b", index: 3, input: "123aabb", groups: undefined]

    exec();在全局的情况下也只返回一个。但在下次调用时会在上次匹配完的地方继续匹配。而不在全局的情况下,只匹配第一个,不会继续匹配。

            var reg = /ab/g;  
            var str = 'abababab';
            console.log(reg.lastIndex);  //  0  开始搜索下一个匹配项的字符位置,从0算起
            console.log(reg.exec(str))   //["ab", index: 0, input: "abababab", groups: undefined]
            console.log(reg.lastIndex);  //2
            console.log(reg.exec(str))   //["ab", index: 2, input: "abababab", groups: undefined]
            console.log(reg.lastIndex);  //4
            console.log(reg.exec(str))
            console.log(reg.lastIndex);    

    持续调用exec,当匹配到字符串末尾时,在调用,就会返回空,在调用就会右从头开始,并且每次调用lastIndex都会改变。

    支持正则表达式String对象的方法

     match() 参数是正则表达式

    当不全局模式时,返回的和exec一样,第一项是整个匹配的内容,其他项有子表达式匹配的内容,index和input。只匹配一个,不会继续匹配。

            var reg = /ab/;  
            var str = 'abababab';
            console.log(str.match(reg));  //["ab", index: 0, input: "abababab", groups: undefined]  

    当在全局匹配时,返回的只有匹配到的字符,并且是所有符合的,都存在数组

            var reg = /ab/g;  
            var str = 'abababab';
            console.log(str.match(reg));    //["ab", "ab", "ab", "ab"] 

    search() 参数是正则表达式 返回字符串中第一个匹配的索引,如果没有找到匹配项,返回-1.

    replace()接收两个参数,第一个参数可以是字符串或RexExp对象。第二个参数可以是一个字符串或者是一个函数。把字符串含有第一个参数替换成第二个参数。

            var str = 'aa';
            var a = str.replace('a','b') 
            console.log(a)   // ba   只能匹配到一个。
    //当第一个参数使用正则表达式,并且是全局匹配,就会匹配所有的字符串
          var reg = /a/g;
          var str = 'aa';
          var a = str.replace(reg,'b')
          console.log(a)    //bb
     

    例:把aabb类型的字符变成bbaa类型的字符

     var reg = /(w)1(w)2/g;  
     var str = 'aabb';
     var a = str.replace(reg,"$2$2$1$1") //第二个参数一定是字符串或者是函数,在字符串里也可以反向引用,使用$1(第一个子表达式)$2(第二个字表达式)
     console.log(a)
    第二个参数传入函数。
      var reg = /(w)1(w)2/g;
      var str = 'aabb';
      var a = str.replace(reg,function($,$1,$2){ //系统会自动传参,第一个代表全局匹配的结果,第二个代表第一个子表达式,第三个代表第二个子表达式,以此类推
        return $2 + $2 + $1 + $1 + "哈哈abc"
      })
     console.log(a) 
  • 相关阅读:
    Mybatis Plus3.4.0打印SQL至控制台
    234 saltstack安装配置与使用
    CentOS7.9二进制方式安装mysql5.7
    查锁杀锁
    Oracle搭建DG
    MySQL 恢复
    数据库克隆(克隆的主机只需要安装软件不需要安装实例)
    MySQL单表恢复
    Properties实现文件存储
    大易之磁盘操作
  • 原文地址:https://www.cnblogs.com/jiaobaba/p/12034260.html
Copyright © 2020-2023  润新知