正则相关知识

86 阅读2分钟

正则

1 定义:自己写了一个规则,用于匹配一段字符串是否符合规则

2 创建

    a. 字面量的形式
    const reg(自定义) = /abc/  打印/abc/
    b. 内置构造函数
    const reg1 = new RegExp('abc') 打印/abc/

3 正则的常用方法

  •   3.1 匹配(test)
          匹配字符串是否符合字正则规则
          符合:true
          不符合:false
    
  •   3.2 捕获   
          a. 语法:正则.exec(字符串)   
          b. 没有捕获到
          直接返回一个null
          c. 捕获到了
          没有小括号也没有g的情况,永远只捕获满足条件的第一个
    
          没有小括号,但是有g的情况,每次都捕获到一个,全部捕获完以后,没有以后,在捕获一次会返回null后面又重新开始循环
    
          有小括号的情况,下标0是我们正常捕获到的内容,从下标1开始,就是每个小括号捕获到的内容
          例子:
          const reg = /(\d{4})(\d{4})(\d{4})(\d{4})/
          const str = '522252004111023'
          console.log(reg.exec(str))
    

4 正则的元字符

            正则表达式由那些组成  元字符(规则运算符)+修饰符(修饰整个正则表达式的符合)
            元字符 - 普通元字符
            \d  表示一位数字(范围:0-9)
            \D  表示一位非数字(除了0-9)
            \w  表示数字(0-9)字母(a-z A-Z)下划线(_)的某一个字符
            \W  表示除了\w以外的某一个字符
            \s  表示一位空白字符
            \S  表示一位非空白字符
            .   表示非换行的任意字符
            \   表示把有意义的符号转换为没有意义的文本 两者相互转换

5 正则的边界元字符

    5.1 ^ 表示开头
    5.2 $ 表示结尾

6 正则的限定元字符

    表示前面一个符号出现多少次
      *   表示0~正无穷次
      +   表示1~正无穷次
       ?   表示0~1次
     {n}   表示限定n次,要刚刚好
     {n,}  表示最少n次
   {n,m}  表示最少n次,最多m次

7 正则的特殊元字符

  • () 表示当一个整体 / 单独捕获

  • | 或

  • [] 包含 [abc] 包含其中一项

  • [^] 非 [^abc] 只要不是其中一位即可

  • 横杠(-) 到(至) 通常和包含和非一起使用

     现学现用 :
         问题: 或(|) 的分界线在哪里?
        const reg = /^abc|def$/ 
        分界线:在|
        const reg1 = /^ab(c|d)ef$/    
        分界线:是正则的边界
     总结: 或的分界线是小括号或者是正则的边界 
    

8 正则的重复元字符

    符号: \1  \2 .....\9
    代表第几个小括号的值
    注:小括号里面是什么\1的位置就是什么
    例子:
    const reg = /^(abc|def)\1$/ 
    console.log(reg.test('abcdef')) // false
    console.log(reg.test('abcabc')) // true
    console.log(reg.test('defabc')) // false
    console.log(reg.test('defdef')) // true

9 正则的标识符(修饰符)

    书写在正则的外面,用于描述整个正则表达式
    i  忽略大小写
    g  全局  一项一项的打印

10 正则的两大特性

  • 懒惰
    正常捕获字符串时每次都从下标0开始

    解决方法:给正则添加一个修饰g

  • 贪婪 每次在捕获的时候,会尽可能多捕获一些东西

    解决方法:在原来的修饰符后添加一个? 然后相当于开启非贪婪模式

    贪婪:能拿多少就拿多少

    非贪婪:能少拿就少拿

    贪婪的限定符:* + ? {n,} {n,m}

    非贪婪的限定符:*? +? ?? {n,}? {n,m}?

11. 两种创建正则表达的区别

    11.1 书写正则修饰符
    const reg = /\w/ig
    const reg1 = new RegExp ('abc', 'ig')

    const reg = /\w/ig
    const reg1 = new RegExp('\w', 'ig')
    会把'\w'    把 w 转化为以一个具有特殊含义的 字符, 所以这一步没有什么意义
    我们如果想要 正则表达式\w        \\w
    const reg1 = new RegExp('\\w', 'ig')