正则表达式

123 阅读4分钟

正则

    规则表达式
    写一段规则,用来匹配一段字符串是否符合规则

创建规则表达式

    1、字面量形式
    const reg = /\w/ig
    2、内置构造函数
    const reg1 = new RegExp('\w','ig')
  • 区别: 1、在书写标识符时 字面量:写在正则后面 内置构造函数:写在括号里面,和正则用(,)分隔 2、 RegExp('\w','ig') 会把‘\w’ w转化为一个具有特殊含义的字符 需要将‘\w’ 改为'\w' 才为正则表达式

正则的常用方法

1、匹配:匹配字符串是否符合正则规则
    test 
        符合:true
        不符合:false
        语法:正则.test(字符串)

2、捕获:正则表达式的捕获

    语法:正则.exec(字符串)
    1、没有捕获到:直接返回一个null
    // const reg = /\d{3}/
    // console.log(reg.exec('zxcvbnm'))    // null

    2、捕获到了:
  •   2.1没有小括号也没g的情况,永远捕获的都是下标0开始的第一个符合条件的
      没有小括号, 也没有 g
      const reg = /\d{3}/
      console.log(reg.exec('z123xc456vb789nm000'))//123
      console.log(reg.exec('z123xc456vb789nm000'))//123
      console.log(reg.exec('z123xc456vb789nm000'))//123
    
  •    2.2 没有小括号,但是有修饰符g的情况
      第一次捕获完成后,第二次从上一次捕获结束位开始捕获
      当所有的匹配项完成后,会返回一个null
      当再次捕获时又从头开始捕获。
              有修饰符 g
      const reg = /\d{3}/g
      console.log(reg.exec('z123xc456vb789nm000'))    // 123
      console.log(reg.exec('z123xc456vb789nm000'))    // 456
      console.log(reg.exec('z123xc456vb789nm000'))    // 789
      console.log(reg.exec('z123xc456vb789nm000'))    // 000
      console.log(reg.exec('z123xc456vb789nm000'))    // null
      console.log(reg.exec('z123xc456vb789nm000'))    // 123
    
  •    2.3 有小括号的时候,
          下标0还是我们正常捕获的内容
          从下标1开始,就是每个小括号捕获到的内容。
    
      const reg = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/
      const str = '411371200411081234'
      console.log(reg.exec(str))
    
      const reg1 = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}|\dx)/
      const str1 = '41137120041108123x'
      console.log(reg1.exec(str1))
    

正则的元字符

    正则表达式的符号有什么组成?
        1、元字符:正则表达式的规则符号
        2、修饰符:修饰整个正则表达式的符号
1、元字符-普通元字符
1、\d   表示 一位数字(0~92、\D   表示一位非数字(除了0~93、\w   表示一位字母数字下划线(_),其中的一个
4、\W   表示除了字母数字下划线之外的其中一个字符
5、\s   表示一位空白字符
6、\S   表示一位非空白字符
7、.    表示一位非换行(\n)的任意字符
8、\    表示转移符
            有意义字符---无意义文本
            无意义文本---转为有意义的符号
2、正则的边界字符
1、^    表示开头
2$    表示结尾
/^\d$/    // 表示字符串只能是一个数字
3、正则的限定符(表示前边一个符号出现多少次)
1、*    表示 0~正无穷次
2、+    表示 1~正无穷次
3、?   表示  0~1次
4、{n}  表示只能是n次
5、{n,} 表示最少n次
6、{n,m}    表示n~m次
4、正则的特殊元字符
1、()   
    含义1:当成一个整体
    含义2:单独捕获
2、|    或
        字符为 | 两边的都行
        分界线:小括号或者正则的边界(开头和结尾)

3[]    包含
    注意:[abcd]  包含其中一个即可  []实际代表的是以为字符

4[^]  非
    注意:[^abcd] 只要不是他们四个中 一个(一位字符) 即可

5、-    到(至)
    通常与 (包含  非) 一起使用
    [0-9]   数字 0~9 中的一个           \d
    [^0-9]  不是数字 0~9 中的 一个      \D
    [a-z]   小写 字母a~z
    [A-Z]   大写 字母A~Z
5、重复元字符
符号:\1    \2  \3  ... \9(代表第几个括号的值)
/(abc|def)\1/   
        小括号内为abc   \1  也要为abc
        小括号内为def   \1  也要为def
6、正则的标识符(修饰符)
            书写在正则外面,用于描述整个正则表达式的

    1、i    (忽略大小写)
    2、g    (全局)
7、正则的两大特性
    1、懒惰
            正常捕获字符串的时候 每次都从下标0开始
            解决方式:给正则添加一个修饰符 g
    2、贪婪
            每次捕获的时候,尽可能多的捕获一些东西
            解决方式:给原来的修饰符后添加一个 ? 然后相当于开启了非贪婪模式
        贪婪模式:能多拿就多拿  限定符:(* + ?{n} {n,m})
        非贪婪:能少那就少拿    (*? +? {n,}? {n,m}?)