正则表达式

122 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情

正则表达式是什么

  • 表达式
    对字符串进行逻辑匹配运算
  • 内置对象
    js语言提供好的对象,直接使用即可,存储一些对字符串进行匹配运算的方法

正则表达式的作用

对字符串进行逻辑匹配运算(格式校验)

正则表达式使用流程

  • 声明正则对象

    let reg = new RegExp(/正则表达式/)

  • 调用对象test方法

    reg.test('要校验的字符串')

    true符合规则

    false不符合规则

正则表达式语法由两部分组成

原义文本字符

字符串本身的含义

别想太多,写什么就是什么

console.log(/魔王/.test('魔大王'))  //false
console.log(/魔王/.test('大王魔'))  //false
console.log(/魔王/.test('大魔王'))  //true

元字符

改变了字符串本身的含义,类似于js中的关键字

  • 字符类

    [] 字符类 将某种特征的字符串归为一类

    /[abc]/:将 abc 这种字符归为一类
    说人话:检测字符串有没有 abc  有任意一个即可 返回 true
    

    [^] 反向类 将不是某种特征的字符串归为一类

    /[abc]/:将 不是a 或 不是b 或 不是c 这种字符归为一类
    说人话:检测字符串有没有除了 abc 以外的字符  有任意一个即可 返回 true
    
  • 范围类

    代表字符的范围

    /[0-9]/:检测有没有数字字符
    /[a-z]/:检测有没有小写字母
    /[A-Z]/:检测有没有大写字母
    

    范围类可以连写

    /[a-zA-Z0-9]/:检测字符串有没有字母或数字
    复制代码
    

    范围类是一个闭区间

    /[5,8]/:检测有没有58之间的数据,包含58
    

    范围类 右边 一定大于左边

    /[8-5]/:会报错
    /[8-90-5]/: 包含 8 9 0 1 2 3 4 5
    
  • 预定义类

    预定义类            等价类                   含义
    
       .               [^\r\n]                 除了回车和换行之外的所有字符
       \d              [0-9]                   数字字符
       \D              [^0-9]                  非数字字符
       \s              [\f\n\r\t\v]            空白字符
       \S              [^\f\n\r\t\v]           非空白字符
       \w              [a-zA-Z_0-9]            单词字符
       \W              [^a-zA-Z_0-9]           非单词字符
    
  • 边界

    正则表达式提供了几个常用的边界匹配字符

    边界字符            含义 
      ^                 以xxx开头
      $                 以xxx结束
     \b                  单词边界
     \B                  非单词边界
    

    正则表达式元字符含义可能不止一种,会有多种含义

    ^正则严格匹配$

  • 量词

    检查字符出现的次数

    ?                         出现零次或一次(最多出现一次)
    +                         出现一次或多次(至少出现一次)
    *                         出现零次或多次(任意次)
    {n}                       出现n次
    {n,m}                     出现n-m次
    {n,}                      出现至少n次
    
  • 分组

    • () 默认情况下量词只能对一个字符生效 用括号包住的部分就是整体
    • | 提升优先级 在正则中表示或
    • 反向引用 正则表达式在匹配的时候,会自动把()内部匹配到的数据提取到RegExp的¥变量中(1−1-1−9)
  • 修饰

    g   global        全局匹配
    i   intensity     区分大小写
    m   multiple      检测换行用于边界