8.正则更多的捕获方式
上一篇:‘?’在正则中的作用
- 正则捕获的原理
- 正则捕获的原理就是与它的lastIndex有关(lastIndex的改变与加不加G有关)
let str='zhang2019xiao2020lin2021'; let reg=/\d+/g; console.log(reg.lastIndex)//0 console.log(reg.test(str))//true console.log(reg.lastIndex)//9 基于TEST进行匹配的时候,如果设置了G,TEST匹配也相当捕获修改了LAST-INDEX的值 console.log(reg.exec(str))//["2020", index: 13, input: "zhang2019xiao2020lin2021", groups: undefned]
- 正则捕获的原理就是与它的lastIndex有关(lastIndex的改变与加不加G有关)
- 不同字符串应用同一个正则
let str='shang2019'; let reg=/\d+/g; console.log(reg.exec(str))//["2019", index: 5, input: "shang2019", groups: undefined] 已改变REG.LAST-INDEX console.log(reg.lastIndex)//9 console.log(reg.exec('shang2019xiao2020'))//["2020", index: 13, input: "shang2019xiao2020", groups: undefined] //虽然捕获的不是同一个字符串,但是正则是同一个,上一次正则处理的时候修改了它的LAST-INDEX,也会对下一次匹配新的字符串产生影响
- replace:实现正则捕获的方法(本身是字符串替换)
- 有些字符串不使用正则去替换是无法完成的
//需求:将字符串全部xiaolin替换成xiaolinzuishuai let str='xiaolin2019xiaolin2020' //1. 不使用正则去替换(执行多次也无法完成) str=str.replace('xiaolin','xiaolinzuishuai') console.log(str)//xiaolinzuishuai2019xiaolin2020 str=str.replace('xiaolin','xiaolinzuishuai') console.log(str)//xiaolinzuishuaizuishuai2019xiaolin2020//2. 使用正则去替换(只需执行一次,似乎很好用) str=str.replace(/xiaolin/g,'xiaolinzuishuai'); console.log(str)//'xiaolinzuishuaizuishuaizuishuai2019xiaolinzuishuai2020'
- REPLACE原理:(正则中)
// =>1. let str='xiaolin{val:2019}xiaolin{val:2020}' let reg=/\{val:(\d+)\}/g str=str.replace(reg,'@')//用reg正则和str字符串进行匹配,匹配几次替换几次。每一次都是把当前正则匹配的结果用replace第二个参数替换掉 console.log(str)//'xiaolin@xiaolin@'// =>2. let str='xiaolin{val:2019}xiaolin{val:2020}' let reg=/\{val:(\d+)\}/g str=str.replace(reg,'$1')//'$1'为正则中第一个分组匹配到的内容 console.log(str)//xiaolin2019xiaolin2020
- 【8.正则更多的捕获方式】以上两种写法并不常用,常用的是函数
let str='xiaolin{val:2019}xiaolin{val:2020}' let reg=/\{val:(\d+)\}/g //=>1. REG和STR匹配多少次,函数就被触发多少次,而且传递了一些参数信息值 //=>2.每一次ARG中存储的信息,和执行EXEC捕获的信息相似(内置原理:每一次正则匹配的结果,都把函数执行。然后记忆EXEC把本次匹配的信息捕获到,然后把捕获的信息传递给这个函数) //=>3. 每一次函数中返回的是啥,就把返回的东西替换掉当前正则匹配的内容 str=str.replace(reg,(...arg)=>{ console.log(arg) //第一次匹配输出:["{val:2019}", "2019", 7, "xiaolin{val:2019}xiaolin{val:2020}"]//第二次匹配输出: ["{val:2020}", "2020", 24, "xiaolin{val:2019}xiaolin{val:2020}"] return 'AA' }) console.log(str)//'xiaolinAAxiaolinAA'
- 【8.正则更多的捕获方式】以上两种写法并不常用,常用的是函数
推荐阅读
- 《跨界歌手》:亲情永远比爱情更有泪点
- 【译】20个更有效地使用谷歌搜索的技巧
- 从蓦然回首到花开在眼前,都是为了更好的明天。
- 六月更新的......
- 研学让生活更美好
- 如何更好的去学习
- 姚老师互动问答会|姚老师互动问答会 # 问题001(如何更有智慧的和身边人分享金刚智慧())
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- 杀死一只知更鸟
- 日更小小记