正则的方法

146 阅读3分钟

正则的两种常用方法

1. 匹配 test

  • 匹配符合正则规则的字符串 符合返回值 true 不符合返回值 false
  • 语法 : 正则.test(要检测的字符串)

2. 捕获 exec

  • 语法: 正则.exec(要捕获的字符片段)
  • 没有捕获到 ---> 返回值 null
  • 可以捕获到1 ---> 返回值 是一个数组 ; 索引为 0 的项 就是捕获到的片段 ,没有() 也没有修饰符 g 无论捕获多少次都是 要捕获的那个片段
  • 可以捕获到2 ---> 当有 修饰符 g 时 每次捕获都会 自 上一次 捕获时 结束时的下标 开始从新捕获 直到整个字符结束 返回值 是一个数组 每次下标为 0 的项都不同
  • 可以捕获到3 ---> 当有 () 参与时 下标 0 还是我们捕获到的片段 后续的 下标都是()里的值

元字符

3. 普通元字符

    1. \d 表示一位(一个)数字(0-9)
    1. \D 表示一位非数字(除了0-9)
    1. \w 表示数字(0-9),字母(a-z),下划线(_)其中一个
    1. \W 表示非数字(0-9),字母(a-z),下划线(_)其某一个
    1. \s 表示表示一位空白字符
    1. \S 表示非空白字符
    1. . 表示一位非换行的一位任意字符
    1. \ 1.把没有意义的符号,转为没有意义的文本 2.把没有意义的文本转为有意义的符号

限定元字符

  • 限定元字符, 表示前面一个 符号 出现多少次
    1. *(*号) 表示0~正无穷大
      • (+ 加号) 表示1~正无穷大
    1. ? 表示0~1次
    1. {n} 表示限定 n次 不能多也不能少
    1. {n,} 表示最少 n次
    1. {n,m} 表示最少 n次 最多 m次

特殊元字符

    1. ()
  • 1.1 含义: 将 当成一个整体
  • 1.2 含义: 单独 捕获
    1. | 或的意思 两边是什么 和 什么 都行 如 a|b | 两边是a或者是b 都可以
    1. [] 包含 的意思 如[abcd] 包含其中一项就可以 []实际代表的就是一个字符
    1. [^] 非 的意思 如[^abcd] 只要不是他们中的一个即可 [^]实际代表的就是一个字符
      •    到(至) 的意思 通常于 包含 和  非 一起使用
          [0-9]    数字0-9中的一个
          [^0-9]   不是数字0-9中的一个
          [a-z]    字母a-z 
          [A-Z]    大写字母A-Z
        

重复元字符

  • 1.\1 \2 ....\9 如:/(abc)|(def)\1/ 若()内是abc 则 \1 的位置也需要时abc 若()内时def 则 \1的位置也需要时def
       //重复元字符
       //单独书写一个标签时要用()包起来
        const reg12 = /<(p|span)><\/\1>/
        console.log(reg12.test('<span></span>'))
        const reg13 = /<(p|div)><\/\1>/
        console.log(reg13.test('<div></div>'))
        const reg14 = /<(h1|h2)><\/\1>/
        console.log(reg14.test('<h2></h2>'))
        const reg15 = /<(header)><\/\1>/
        console.log(reg15.test('<header></header>'))

正则的修饰符

  • 书写在正则外边 用于描述整个正则表达式
    1. i 忽略大小写
    1. g 全局

正则的懒惰和贪婪

懒惰

*正常捕获字符串的时候, 每次都从 下标0开始 解决方式: 给正则添加一个修饰符 g

贪婪

  • 每次在捕获的时候, 会尽可能的多捕获一些东西 解决: 在原有的修饰符后添加一个 ? 然后相当于开启 非贪婪模式
  • 贪婪: 能多拿就多拿
  • 非贪婪: 能少拿就少拿

贪婪限定符

  • *(*号)
  • +(+号)
  • ?
  • {n,}
  • {n,m}

非贪婪限定符

  • *?
  • +?
  • ??
  • {n,}?
  • {n,m}?
 const str = '<div class="box" id="box1"><span></span></div>'

        const reg = /<div.*>/   // 贪婪模式
        console.log(reg.exec(str))

        const reg1 = /<div.*?>/ // 非贪婪模式
        console.log(reg1.exec(str))