JS正则表达式(超详细整理版)

本文详尽地介绍了JavaScript中的正则表达式,包括如何创建正则表达式,使用RegExp对象和字面量方式。重点讲解了正则的 exec 和 test 方法,以及正则表达式的特殊字符和量词。此外,还提到了预查操作符的重要用法。

正则表达式

  1. 创建正则表达式
    • 利用RegExp对象创建
      var reg = new RegExp(/123/);
      console.log(reg)  // /123/
      
    • 字面量创建
      var reg = /123/;
      console.log(reg)  // /123/
      
    • 正则.exec( str ) 从字符串里获取符合正则表达式的一部分片段

      => 返回值:

      1. 字符串里面没有符合规则的片段

      ​ -> null

      2. 字符串里面有符合规则的片段

      ​ 2-1. 基础捕获

      ​ -> 返回值是一个数组

      ​ -> [0] 是捕获出来的片段

      ​ -> 不管有多少个片段, 都只是捕获第一个片段

      ​ -> 不管捕获多少次, 都是第一个片段

      ​ 2-2. 当正则表达式有 () 的时候

      ​ -> 返回值是一个数组

      ​ -> 从 索引[1] 开始依次是每一个小括号的单独捕获

      ​ 2-3. 当正则有全局标识符 g 的时候

      ​ -> 第二次捕获会从第一次捕获的结束为开始继续向后查找

      ​ -> 直到找不到了位置, 返回 null

      ​ -> 再后面一次捕获, 依旧会从 [0] 位置开始查找

      const reg = /abcd/g
       const reg1 = /(b)/
      const res = reg1.exec('aaabbbcccddd')
       console.log(res)   //返回一个数组集合
       const res2 = reg.exec('aaabcdddddabcdabcd')
       console.log(res2) //返回一个数组集合
      
    • 正则.test( str ) 检测字符串是否符合正则表达式规范 符合返回true 不符合返回false
    
	 var reg = /123/ 只要包含123就可以
	     console.log(reg.tedt(123))  //true
	     console.log(reg.test('abcd'))  //false
  1. 正则表达式特殊字符
    • ^ 以…为开头 /^abc/ 只能以abc开头
    • $ 以…为结尾 /abc/只能以abc结尾/abc/ 只能以abc结尾 /^abc/abc/abc/ 必须是abc
    • [abc]表示有一系列字符可以选择,只匹配一个
    • \s 表示一个空格
    • \S 表示一个非空格
    • \t 表示一个制表符(tab) => 一个制表符就是制表符, 不是多个空格
    • \d 表示一个数字
    • \D 表示一个非数字
    • \w 表示一个 数字字母下划线 => 表示 数字 字母 下划线 三选一
    • \W 表示一个 非数字字母下划线 => 表示 数字 字母 下划线 以外的任意一个都行
    • 点(.) 表示非换行的任意字符
    • * 表示出现 0 ~ 多次
    • + 表示出现 1 ~ 多次
    • ? 表示出现 0 ~ 1 次
    • {n} 表示出现 n 次
    • {n,} 表示出现 n ~ 多次
      => {0,} 等价于 *
      => {1,} 等价于 +
    • {n,m} 表示出现 n ~ m 次
      => {0,1} 等价于 ?
    • +? 在捕获的时候会捕获能捕获到的最大长度
    • *? 在捕获的时候会按照最少的数量来捕获
    • ?? 在捕获的时候会按照最少的数量来捕获
    • {n}? 在捕获的时候会按照最少的数量来捕获 最少n个
    • {n,}? 在捕获的时候会按照最少的数量来捕获 最少n个
    • {n,m}? 在捕获的时候会按照最少的数量来捕 最少n个
  2. 正则的预查
    • ?= 在捕获一个内容的时候, 后面必须跟着是我选择的某一个才可以
      // 字符串是 ES2015 或者 ES2016 是可以捕获的
          // 但是我只捕获 ES 不需要 2015 或者 2016
          const reg = /ES(?=2015|2016)/
          console.log(reg.exec('ES2015')) //返回一个数组集合
          console.log(reg.exec('ES2016')) //null
          console.log(reg.exec('ES')) //null
      
    • ?! 在捕获一个内容的时候, 后面必须跟着不是我选择的某一个才可以
      const reg2 = /ES(?!2015|2016)/
          console.log(reg2.exec('ES2015')) //null
          console.log(reg2.exec('ES2016')) //null
          console.log(reg2.exec('ES2017')) //返回数组集合
      
    • ?<= 在捕获一个内容的时候, 前面必须是我选择的某一个才可以
      reg = /(?<=2015|2016)ES/
          console.log(reg.exec('2015ES'))
          console.log(reg.exec('2016ES'))
          console.log(reg.exec('2017ES'))//null
      
    • ?<! 在捕获一个内容的时候, 前面必须不是我选择的某一个才可以
         const reg2 = /(?<!2015|2016)ES/
          console.log(reg2.exec('2015ES'))//null
          console.log(reg2.exec('2016ES'))//null
          console.log(reg2.exec('2017ES'))
      
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值