zoukankan      html  css  js  c++  java
  • 《红宝书》 |基本引用类型-正则表达式RegExp

    正则表达式

    正则表达式是按照一定的规则组成的表达式,用于匹配字符串。该表达式通常由普通字符、元字符其他特殊字符标记字符组成。

    相关概念

    元字符

    元字符在正则表达式中有一种或多种特殊功能:

    yYKJ3V.png

    其他特殊字符

    yYub79.png

    标记字符

    yYuOt1.png

    实例创建方式

    1. 字面量

    let expression=/pattern/flags
    
    //例:匹配10-19 全局
    let pattern=/1[0-9]/g
    

    双斜杠里面的pattern表示匹配模式,通常由普通字符与元字符组成。双斜杠外面的flags称为标记字符,用于控制正则表达式的行为,可有可没有。


    如果要匹配元字符本身,需要加上反斜杠转义:

    //匹配第一个数字 全局
    let pattern=/[0-9]/
    //匹配第一个[0-9]
    let pattern=/[0-9]/
    

    2. 构造函数

    let expression=new RegExp("pattern","flags")
    
    //例:匹配数字 全局
    let pattern=new RegExp("[0-9]","g")
    

    RegExp可以基于已有的正则表达式实例创建,并修改它们:

    const re1=/cat/g
    const re2=new RegExp(re1)     // "/cat/g"
    const re2=new RegExp(re1,"i") // "/cat/i"
    

    由于RegExp构造函数的参数是字符串,所以如果要匹配元字符本身,需要二次转义:

    //匹配第一个数字
    let pattern=/[0-9]/
    //匹配第一个[0-9]
    let pattern=new RegExp("\[0-9\]")
    

    相关例子

    //匹配第一个非数字
    let pattern=/^d/
    let pattern=/D/
    
    //匹配所有的数字
    let pattern=/[0-9]/g
    
    //1. 100-200
    let pattern1=/[1][0-9][0-9]/
    //2. 要么是数字、要么是小写字母、要么是大写字母。其中小写字母优先
    let pattern2=/[0-9]|([a-z])|[A-Z]/
    //3. 一个小写字母,有数字(没有也行)
    let pattern3=/[a-z][0-9]*/
    //4. 一个小写字母,小写字母后面至少有一个9
    let pattern4=/[a-z][9]+/
    //5. 小写字母至少出现5-10次
    let pattern5=/[a-z]{5,10}/
    //6. 小写字母至少出现1次以上
    let pattern6=/[a-z]{1,}/
    //7. 以数字开头,以小写字母结尾
    let pattern7=/^[0-9][a-z]$/
    //8. 非数字
    let pattern8=/[^0-9]/
    //9. 特殊字符
    let pattern9=/[^0-9a-zA-Z]/
    

    实例属性

    yYV7ge.png

    let pattern=/[0-9]/g
    pattern.global      //true
    pattern.ignoreCase  //false
    pattern.lastIndex   //0
    pattern.source      //"[0-9]"
    pattern.flags       //"g"
    

    实例方法

    yYZJ56.png

    • test()

      接收一个待匹配字符串,如果该字符串与模式匹配,返回true

      let text="000-00-0000"
      let pattern=/d{3}-d{2}-d{4}/
      pattern.test(test)  //true
      
    • exec()

      接收一个待匹配字符串,如果该字符与模式匹配,返回一个Array实例,该实例包括两个额外属性:indexinput;如果匹配不到,返回null。index表示匹配到的字符串在原始字符串的索引位置;input表示原始字符串。

      如果匹配成功,分为两种情况。如果匹配模式没有捕获组(),则返回一个元素,即匹配到的结果;否则返回多个元素:

      let text="cat bat fat"
      let pattern=/cat/
      pattern.exec(text)  //["cat", index: 0, input: "cat bat fat"]
      
      let pattern=/cat (bat (fat))/
      let pattern=/cat/
      pattern.exec(text)  //["cat bat fat", "bat fat", "fat", index: 0, input: "cat bat fat"]
      

      如果设置全局标记,则每次调用都会向前搜索下一个匹配项;否则永远只返回第一个匹配项。

      let text="cat bat fat"
      let pattern=/.at/
      let matches=pattern.exec(text)
      matches.index       //0
      matches[0]          //"cat"
      pattern.lastIndex   //"0"
      
      let text="cat bat fat"
      let pattern=/.at/g
      let matches=pattern.exec(text)
      matches.index       //0
      matches[0]          //"cat"
      pattern.lastIndex   //"3"
      
      //第二次调用
      matches=pattern.exec(text)
      matches.index       //4
      matches[0]          //"bat"
      pattern.lastIndex   //"7"
      
      //第三次调用
      matches=pattern.exec(text)
      matches.index       //8
      matches[0]          //"fat"
      pattern.lastIndex   //"11"
      
      //第四次调用
      matches=pattern.exec(text) //null
      

    RegExp构造函数属性

    RegExp构造函数本身也有属性,这些属性适用于作用域中所有的正则表达式。这些字符可以提取出exec()test()执行的操作相关的信息。
    yYnBqJ.png

    let text="this has been a short summer"
    //搜索后面跟着hort的字符
    let pattern=/(.)hort/g
    if(pattern.test(text)){
      console.log(RegExp.input) //this has been a short summer
      console.log(RegExp.lastMatch) //short
      console.log(RegExp.leftContext) //this has been a 
      console.log(RegExp.rightContext)  // summer
      console.log(RegExp.lastParen) //s
    }
    

    简写形式大多是不合法的ECMAScript标识符,Opera不支持简写、IE不支持多行匹配

  • 相关阅读:
    【java编程】java的关键字修饰符
    【分布式锁】redis实现
    【java高级编程】JDK和CGLIB动态代理区别
    【druid 】数据库连接池
    【druid 】数据库连接池-sql解析
    【mysql】Mha实现高可用数据库架构
    【mysql】工具使用
    7.7 服务远程暴露
    7.6 服务远程暴露
    7.5 zookeeper客户端curator的基本使用 + zkui
  • 原文地址:https://www.cnblogs.com/sanhuamao/p/14381494.html
Copyright © 2011-2022 走看看