美文网首页
8.正则更多的捕获方式

8.正则更多的捕获方式

作者: 追马的时间种草 | 来源:发表于2019-10-22 09:41 被阅读0次

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


  • 正则捕获的原理
    • 正则捕获的原理就是与它的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]
      
  • 不同字符串应用同一个正则

    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
      
      
      • 以上两种写法并不常用,常用的是函数

        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.正则更多的捕获方式

    上一篇:‘?’在正则中的作用 正则捕获的原理正则捕获的原理就是与它的lastIndex有关(lastIndex的改...

  • java正则使用

    正则切割 正则捕获 正则完全匹配

  • javascript正则表达式 execAll的实现 ----

    正则的捕获 实现正则捕获的方法 正则RegExp.prototype上的方法exectest 字符串String....

  • 正则:分组

    正则分组作用: 1、改变优先级:2、分组引用 3、分组捕获:正则在捕获的时候,不仅把大正则匹配的内容捕获到,而且还...

  • 正则-分组捕获实例分析

    在正则捕获的时候,我们添加分组,不仅仅可以把大正则匹配的内容捕获,而且还可以把小分组代表的子正则匹配的内容一起捕获...

  • javascript正则表达式----分组捕获

    正则的分组捕获 简单的分组捕获之前在写身份证号正则(不完整)的时候,提到过分组捕获 分组多次捕获假设有这种需求: ...

  • 正则捕获-正则捕获的懒惰性,分组捕获

    let str = "hshshs2019sdfaa2020asdw2021"; 实现正则捕获的办法 正则RegE...

  • 5.正则捕获的懒惰性及解决方案

    上一篇:常用正则表达式 正则捕获的懒惰性及解决方案 正则捕获​ :把一个字符串和正则匹配的部分获取到​ [正则方法...

  • JS正则表达式的骚操作

    参考资料 《JS正则表达式的分组匹配》《正则表达式之捕获组/非捕获组介绍》《正则表达式中(?:pattern)、(...

  • 正则:捕获

    exec:正则捕获 每一次捕获的时候都是先进行默认的匹配,如果没有匹配成功的,捕获的结果是null;只有有匹配的内...

网友评论

      本文标题:8.正则更多的捕获方式

      本文链接:https://www.haomeiwen.com/subject/zaimmctx.html