JS正则表达式2

41 阅读2分钟

捕获

  • 捕获
    • 语法:正则.exec(字符串)
      • 1.字符串没有符合正则规则的内容
        • 捕获的结果为null
      • 2.正则没有小括号, 没有标识符g
        • 捕获到的是一个数组,下标0是我们捕获到的值,但是不管捕获多少次,都是从下标0开始,第一个满足条件的
      • 3.有小括号
        • 下标0是符合正规规则的字符串
        • 从下标1开始,是每个小括号单独捕获出来的内容
      • 4.有标识符g
        • g叫做全局标识符

        • 第二次捕获的时候,会从第一次捕获结束的位置开始进行捕获

        • 直到找不到内容,会返回一个null

        • 然后下一次捕获的时候,会从字符串开始重新捕获

1.字符串没有符合正则规则的内容

    var reg = /\d{3}/
    console.log(reg.exec('wdwfa'))

2.正则没有小括号, 没有标识符g

    var reg = /\d{3}/
    console.log(reg.exec('w123d456wf789a'))

3.有小括号

    var reg =  /(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/
    var num = '411381200401311234'
    console.log(reg.exec(num))

4.有标识符g

    var reg = /\d{3}/g
    var str = 'w123d456wf789a'
    console.log(reg.exec(str)) //[0]:123
    console.log(reg.exec(str)) //[0]:456
    console.log(reg.exec(str)) //[0]:789
    console.log(reg.exec(str)) //null
    console.log(reg.exec(str)) //[0]:123
    
    

正则的两大特性

  • 正则的两大特性
    • 1.懒惰
      • 每次都是在下标0的位置开始捕获
      • 解决:在正则后添加全局标识符g
    • 2.贪婪
      • 每次捕获内容的时候,尽可能的多去捕获内容

      • 解决:使用非贪婪限定符 (在原有的限定符后添加一个?)

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

      • 非贪婪限定符*?

   var str = '<div><span></span></div>'

   //贪婪捕获
   var reg1 = /<div.*>/
   console.log(reg1.exec(str)[0])

   //非贪婪捕获
   var reg2 = /<div.*?>/
    console.log(reg2.exec(str)[0])