正则表达式 捕获
所谓的捕获 是 获取字符串中 符合 正则表达式规范的内容
语法
正则表达式.exec('字符串');
执行结果
在捕获查找时 如果 字符串内容 没有符合正则表达式的字符
执行结果是 null
如果 字符串内容 包含符合正则表达式的字符
执行结果是 带有 字符串键名的数组
符合正则表达式规范的内容
默认只获取第一个符合的内容
! 多次执行 捕获的都是 第一个符合的内容
语法
正则表达式.exec('字符串');
/ /g 全局匹配
一般跟 死循环配合使用 获取字符串中所有符合的内容生成一个新数组
! 多次执行
第一次 从 字符串起始位置开始 获取 第一个符合正则表达式规范的内容
之后再执行捕获 是 从上一次捕获结束位置开始 获取下一个符合正则表达式规范的内容
多次捕获 每次 都是从上一次结束的位置开始 获取下一个符合正则表达式规范的内容
直到捕获结果是 null 也就是 没有符合正则表达式规范的内容
再执行捕获 再次从 字符串起始位置开始 执行 捕获效果
先看一下~
// let str = 'abc1234def456ghi789jklmn' ;
// // 从开头到结尾 只能是 3位数字
// let reg1 = /^\d{3}$/ ;
// // 捕获结果
// // 没有符合正则表达式的内容 结果 是 null
// console.log( reg1.exec( str ) );
// // 只要包含 3位 数字就行
// let reg2 = /\d{3}/ ;
// // 捕获结果
// // 每次捕获的结果 都是 符合 正则表达式语法规范的内容
// // 默认都是捕获第一个符合的规范的内容
// console.log( reg2.exec( str ) );
// console.log( reg2.exec( str ) );
// console.log( reg2.exec( str ) );
// console.log( reg2.exec( str ) );
// console.log( reg2.exec( str ) );
// // 只要包含 3位 数字就行
// // 添加 / /g 全局匹配
// let reg3 = /\d{3}/g ;
// // 第一次执行 获取第一个符合内容的字符串
// console.log( reg3.exec( str ) );
// // 第二次执行 获取第二个符合内容的字符串
// console.log( reg3.exec( str ) );
// // 第三次执行 获取第三个符合内容的字符串
// console.log( reg3.exec( str ) );
// // 第四次执行 获取第四个符合内容的字符串
// // 字符串中 只有 3个 符合 正则表达式的字符串内容
// // 第四 捕获结果是 null
// abc1234def456ghi789jklmn
// 第一次捕获 是 从 abc123 中 获取 123
// 第二次捕获 是 从 4def456 中 获取 456
// 第三次捕获 是 从 ghi789 中 获取 789
// 第四次捕获 是 从 jklmn 中 获取 null
// 第五次捕获 是 从 字符串起始 开始 再次捕获
// 捕获字符串中 所有符合内容的字符
let str = 'abc1234def456ghi789jklmn' ;
// 创建一个空数组
const arr = [] ;
// 定义正则表达式
let reg = /\d{3}/g ;
// 定义 死循环
while( true ){
// 执行 正则表达式 捕获
let res = reg.exec( str );
console.log( res );
// 如果 捕获结果是 null 没有匹配内容 终止写入 终止循环
if( res === null ) break ;
// 如果捕获结果 不是 null
// 索引下标 0 存储的是 符合正则规范的内容 写入 空数组中
arr.push( res[0] );
}
console.log( arr );