正则捕获与test方法
正则捕获的方法
前面介绍了exec
和match
的正则捕获;本节进行总结正则的捕获;
- 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.$1
–RegExp.$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"
呢?作为思考