上一篇:正则捕获的懒惰性及解决方案
正则捕获的贪婪性及解决方案
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]
下一篇:‘?’在正则中的作用
网友评论