阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      正则捕获与test方法

      正则捕获的方法

      前面介绍了execmatch的正则捕获;本节进行总结正则的捕获; - exec - test

      • 字符串 String.prototype 上支持正则表达式处理的方式
        • replace
        • match
        • splite

      test 捕获

      test 默认只能验证,是true还是false;

      let str = "axihe2020an06bang30";
      let reg = /\d+/g;
      console.log(reg.test(str));//true
      

      还记得上面说test可以改变reg.lastIndex么?

      test 捕获就是运用这个思路的

      let str = "axihe2020an06bang30";
      let reg = /(\d+)/g;
      console.log(reg.test(str));//true
      console.log(RegExp.$1);//"2020"
      console.log(RegExp.$2);//""
      console.log(RegExp.$3);//""
      console.log(RegExp.$4);//""
      

      我们发现RegExp.$1有值,但是其它的都没有值了,我们再试试多次捕获。

      let str = "axihe2020an06bang30";
      let reg = /(\d+)/g;
      console.log(`lastIndex:${reg.lastIndex}`);//
      console.log(reg.test(str));//true
      console.log(`lastIndex:${reg.lastIndex}`);//
      console.log(`$1:${RegExp.$1}`);//"2020"
      console.log(`$2:${RegExp.$2}`);//""
      console.log(`$3:${RegExp.$3}`);//""
      console.log(`\n`);
      console.log(reg.test(str));//true
      console.log(`lastIndex:${reg.lastIndex}`);//
      console.log(`$1:${RegExp.$1}`);//"06"
      console.log(`$2:${RegExp.$2}`);//""
      console.log(`$3:${RegExp.$3}`);//""
      console.log(`\n`);
      console.log(reg.test(str));//true
      console.log(`lastIndex:${reg.lastIndex}`);//
      console.log(`$1:${RegExp.$1}`);//"30"
      console.log(`$2:${RegExp.$2}`);//""
      console.log(`$3:${RegExp.$3}`);//""
      console.log(`\n`);
      console.log(reg.test(str));//true
      console.log(`lastIndex:${reg.lastIndex}`);//
      console.log(`$1:${RegExp.$1}`);//"30"
      console.log(`$2:${RegExp.$2}`);//""
      console.log(`$3:${RegExp.$3}`);//""
      console.log(`\n`);
      console.log(reg.test(str));//true
      console.log(`lastIndex:${reg.lastIndex}`);//
      console.log(`$1:${RegExp.$1}`);//"2020"
      console.log(`$2:${RegExp.$2}`);//""
      console.log(`$3:${RegExp.$3}`);//""
      console.log(`\n`);
      console.log(reg.test(str));//true
      console.log(`lastIndex:${reg.lastIndex}`);//
      console.log(`$1:${RegExp.$1}`);//"06"
      console.log(`$2:${RegExp.$2}`);//""
      console.log(`$3:${RegExp.$3}`);//""
      console.log(`\n`);
      console.log(reg.test(str));//true
      console.log(`lastIndex:${reg.lastIndex}`);//
      console.log(`$1:${RegExp.$1}`);//"30"
      console.log(`$2:${RegExp.$2}`);//""
      console.log(`$3:${RegExp.$3}`);//""
      console.log(`\n`);
      console.log(reg.test(str));//true
      console.log(`lastIndex:${reg.lastIndex}`);//
      console.log(`$1:${RegExp.$1}`);//"30"
      console.log(`$2:${RegExp.$2}`);//""
      console.log(`$3:${RegExp.$3}`);//""
      

      总结:RegExp.$1RegExp.$9储存当前本次正则匹配后,第一个到第九个分组的信息;

      更多的信息可以看console.dir(RegExp)

      let str = "axihe2020an06bang30";
      let reg = /(\d+)/g;
      console.log(`lastIndex:${reg.lastIndex}`);//
      console.log(reg.test(str));//true
      console.log(`lastIndex:${reg.lastIndex}`);//
      console.log(`$1:${RegExp.$1}`);//"2020"
      console.dir(RegExp);
      console.log(`\n`);
      console.log(reg.test(str));//true
      console.log(`lastIndex: ${reg.lastIndex}`);//
      console.log(`$1: ${RegExp.$1}`);//"06"
      console.dir(RegExp);
      

      为甚会出现两次"30"呢?作为思考

      目录
      目录