• 正则表达式详解


    1、基础语法

    用来处理字符串的规则

    • 只能处理字符串的
    • 它是一个规则:可以验证字符串是否符合某个规则,也可以把字符串中符合规则的内容捕获到

    1.1、创建正则

    使用一个正则表达式字面量,其由包含在斜杠之间的模式组成

    var re = /d+/;
    

    调用RegExp对象的构造函数 ,两个参数一个是元字符字符串,一个是修饰符字符串

    var re = new RegExp("\d+");
    

    这两种还是有点语法区别

    1. 构造函数因为传递的是字符串,需要写两个才代表斜杠

    正则表达式由两部分构成

    • 元字符(//在两个斜杠中间的叫元字符)
    • 修饰符

    1.2、元字符

    1.2.1、量词元字符

    设置出现的次数

    元字符 含义
    ***** 零到多次
    + 1到多次(在[]中就代表+号)
    ? 零或者1次
    {n} 出现n次
    {n,} 出现n到多次
    {n,m} 出现n到m次

    1.2.2、特殊元字符

    单个或者组合在一起代表特殊含义的

    元字符 含义
    转义字符
    . 除 (换行符)以外的任意字符
    ^ 以哪一个元字符作为开始
    $ 以哪一个元字符作为结束
    换行符
    d 0-9之间的数字
    D 匹配一个非数字字符 (大写和小写的意思是相反的)
    w 数字,字母,下划线中的任意一个字符
    s 一个空白字符(包含空格,制表符,换页符等)
    一个制表符(一个TAB键:4个空格)
     匹配一个单词的边界
    x|y x或者y
    [xyz] x或者y或者z中的
    [^xy] 除了x/y以外的任意字符
    [a-z] 指定a-z这个范围的任意字符
    [^a-z] 除了小写a-z的字符
    () 正则中的分组符号
    (?:) 只匹配不捕获
    (?=) 正向预查
    (?!) 负向预查

    1.2.3、普通元字符

    代表普通含义

    /zhuzhe/ 只匹配zhuzhe

    1.3、修饰符

    符号 含义
    i 忽略大小写匹配
    m 忽略换行匹配(多行匹配)
    g 全局匹配

    1.4、常用正则

    var re= /[xy]/
    re.test('xy') //true
    
    var re= /^[xy]$/
    re.test('xy') //false
    
    //在[]里面+号就表示普通的+号,但是d在[]还是0-9
    var re=/^[@+]$/
    re.test('+') //true
    
    //[]中不存在多位数
    var re=/^[10-29]$/  //这个并不是表示10-29,表示1或者0-2或者9
    

    常用的正则表达式

    1.4.1、验证是否为有效数字
    /*
    *1、可以出现+-号,也可以不出现
     2、一位0-9都可以,多位首位不能为0
     3、小数部分可能有可能没有,一旦有后面必须有小数点+数字
     ? 0或者1
     + >=1次
     小数点要转义
    */
    var re=/^[+-]?(d|([1-9]d+))(.d+)?$/ 
    
    1.4.2、验证密码
    /*
    *1、 数字,字母,下划线
     2、 6-16位
     w  数字,字母,下划线中的任意一个字符
    */
    var re=/^w{6,16}$/
    
    1.4.3、验证真实姓名
    /*
    * 1. 尼古拉斯.赵四
      2. 名字长度2-10位,有译文 .汉字
      汉字匹配 [u4e00-u9fa5]
    */
    var re=/^[u4e00-u9fa5]{2,10}(.[u4e00-u9fa5]{2,10})*?$/  //这个.写错了
    
    1.4.4、邮箱验证
    var reg = /^w+((-w+)|(.w+))*@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+$/
    
    1.4.5、身份证验证
    var reg=/^d{17}(d|X)$/
    

    1.5、正则的捕获

    • 正则RegExp.prototype的方法
      • exec
      • test
    • 字符串String.prototype上支持正则表达式处理的方法
      • replace
      • match
      • split
      • search
      • matchAll
    1.5.1、 exec(正则方法)

    **exec()** 方法在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null

    index:当前捕获内容在字符串的起始索引

    input;原始字符串

    正则捕获的懒惰性:每执行一次只能捕获到一个符合正则规则,但是默认情况下,执行多次获取的结果永远都是第一个匹配的,其他的永远匹配不到

    当全部捕获时,再次捕获的结果是null

    RegExpObject.exec(string)
    
    • 实例1

      lastIndex:当前正则下一次匹配的起始索引位置(正则的属性),默认是0

      var str="I love antzone ,this is animate";
      var reg=/an/;
      console.log(reg.exec(str));
      /*
       ["an", index: 7, input: "I love antzone ,this is animate", groups: undefined]
      */
      
      var str="I love antzone ,this is animate";
      var reg=/an/g;
      var myArray;
      while ((myArray = reg.exec(str)) !== null) {
        var msg = 'Found ' + myArray[0] + '. ';
        msg += 'Next match starts at ' + reg.lastIndex;
        console.log(msg);
      }
      //Found an. Next match starts at 9
      //VM349:7 Found an. Next match starts at 26
      
    • 实例二:

    var str="I love antzone ,this is animate";
    //这里不加g,会死循环,不然每次都是从第一个开始捕获
    var reg=/an/g;
    console.log(reg.exec(str));
    //加了这句话,就可以找完所用的 an
    reg.lastIndex;
    console.log(reg.exec(str));
    
    /*
    *["an", index: 7, input: "I love antzone ,this is animate", groups: undefined]
     ["an", index: 24, input: "I love antzone ,this is animate", groups: undefined]
    */
    
    1.5.2、test(正则方法)

    **test()** 方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 truefalse

     var re=/an/;
     console.log(re.test('asada')) //fasle
     console.log(re.test('asanda')) //true
    
    //是否在最开始
    let str = 'hello world!';
    let result = /^hello/.test(str);
    console.log(result); 
    // true
    

    注意:test会改变正则表达式的lastIndex, (exec() 同样改变正则本身的 lastIndex属性值).

    1.5.3、 match(字符串方法)

    match() 方法检索返回一个字符串匹配正则表达式的的结果

    1、正则表达式不包含 g 标志,str.match() 将返回与 RegExp.exec(). 相同的结果。

    2、用法都要加g,不加g就没意义,

    3、找不到返回null,找到返回找到值的数组

    • 语法

      str.match(regexp)
      
    • 实例

      var re = /d/
      var str = "2018abc2019dad2020asas"
      console.log(str.match(re))
      //  ["2", index: 0, input: "2018abc2019dad2020asas", groups: undefined]
      
      var re = /d/g
      var str = "2018abc2019dad2020asas"
      console.log(str.match(re))
      // ["2", "0", "1", "8", "2", "0", "1", "9", "2", "0", "2", "0"]
      
      var re = /d+/g
      var str = "2018abc2019dad2020asas"
      console.log(str.match(re))
      //  ["2018", "2019", "2020"]
      
      var re = /an/g
      var str = "2018abc2019dad2020asas"
      console.log(str.match(re))
      // null
      
      "http:/www.baidu.com/?a=1&b=2".match(/([^?&=]+)=([^?&=]*)/g); //["a=1", "b=2"]
      

    3、参考链接

    JavaScript正则表达式总结

    MDN 正则表达式

    元字符及其含意完整例表

    正则教学视频

  • 相关阅读:
    对象属性对话框只能放大不能缩小
    Windows2003 Server升级至SP2后,水晶报表导出EXCEL出错
    磁盘结构损坏且无法读取
    InsusCharacterUtility.dll怎么调用
    会员综合实例
    无法连接SQL Server 2008
    JavaScript alert Utility
    DNS与Active Directory在两台服务器分别布署
    显示用户权限
    焦点新闻图片轮翻广告
  • 原文地址:https://www.cnblogs.com/wlhappy92/p/11891893.html
Copyright © 2020-2023  润新知