6.正则捕获的贪婪性及解决方案

上一篇:正则捕获的懒惰性及解决方案


正则捕获的贪婪性及解决方案


  • let str='shang{2019}xiao{2020}lin{2021}'
    let reg=/\{(\d+)\}/g //{}在正则中有特殊含义。需转译
    console.log(reg.exec(str))// ["{2019}", "2019", index: 5, input: "shang{2019}xiao{2020}lin", groups: undefined]
        //在正则不活的时候,如果正则存在分组,捕获的时候不仅仅把大正则的字符捕获到(数组第一项),而且把小分组匹配的内容也单独抽取出来(数组的第二项开始)
        //但是在小分组中加'?:'可组织分组捕获.   '?:'值匹配不捕获
    let reg=/\{(?:\d+)\}/g 
    console.log(reg.exec(str))//["{2019}", index: 5, input: "shang{2019}xiao{2020}lin{2021}", groups: undefined]
    
  • match捕获方法的局限性

    let str='shang{2019}xiao{2020}lin{2021}'
    let reg=/\{(\d+)\}/g
    console.log(str.match(reg));//["{2019}", "{2020}", "{2021}"]
      //=>match局限性:在正则设置了G的情况下,基于MATCH捕获的内容只有大正则匹配的,小分组没有抽取出来
    
    //不设置G的情况下
    let reg=/\{(\d+)\}/
    console.log(str.match(reg))//["{2019}", index: 5, input: "shang{2019}xiao{2020}lin{2021}", groups: undefined]  结果还会和不用matchde 时候一样
    
  • 贪婪性及解决方法(加‘?’)

    // 正则捕获具备贪婪性:每一次捕获的时候,总是捕获到和正则匹配中zui长的内容  例如:‘2’也符合/\d+/,'2019'也符合。但是捕获到的事最长的‘2019’……
    let str='shang2019xiao2020lin2021'
    let reg=/\d+/g
    console.log(reg.exec(str))//["2019", index: 5, input: "shang2019xiao2020lin2021", groups: undefined]
    
    //解决方法
    let reg=/\d+?/g;// 把‘?’放到量词的后边,代表的就不是 出现0~1次了,而且取消了捕获的贪婪性
    console.log(reg.exec(str))//["2", index: 5, input: "shang2019xiao2020lin2021", groups: undefined]
    

下一篇:‘?’在正则中的作用

你可能感兴趣的:(6.正则捕获的贪婪性及解决方案)