正则捕获与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"呢?作为思考

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了