// => 身份证号码
let str = '123456198010101931'
let reg = /^(\d{6})(\d{4})(\d{2})(\d{2})\d{2}(\d)(?:\d|X)$/
console.log(reg.exec(str))
console.log(str.match(reg))
// => ["123456198010101931", "123456", "1980", "10", "10", "3", "1", index: 0, input: "123456198010101931"]
// => 第一项:大正则匹配的结果
// => 其余项:每一个小分组单独匹配捕获的结果
// => 如果设置了分组(改变优先级),但是捕获的时候不需要单独捕获,可以基于 ?: 来处理
// => 既要捕获到{数字},也想单独的把数字也获取到,例如:第一次找到{0},还需要单独获取0
let str = '{0}年{1}月{2}日'
// => 不设置 g 只匹配一次,exec和match获取的结果一致(既有大正则匹配的信息,也有小分组匹配的信息)
let reg = /\{(\d+)\}/
console.log(reg.exec(str))
console.log(str.match(reg))
["{0}", "0"]
let str = '{0}年{1}月{2}日'
let reg = /\{(\d+)\}/g
console.log(str.match(reg)) // => ["{0}", "{1}", "{2}"]
// 多次匹配的情况下,match只能把大正则匹配的内容捕获到,小分组匹配的内容无法获取
let str = '{0}年{1}月{2}日'
let reg = /\{(\d+)\}/g
let aryBig = [],
arySmall = [],
res = reg.exec(str)
while(res){
let [big,small] = res // => 解构赋值
aryBig.push(big)
arySmall.push(small)
res = reg.exec(str)
}
console.log(aryBig,arySmall)
// => ["{0}", "{1}", "{2}"] ["0", "1", "2"]
// => 分组的第三个作用:'分组引用'
let str = 'book'; // => 'good'、'look'、'moon'、'foot'...
let reg = /^[a-zA-Z]([a-zA-Z])\1[a-zA-Z]$/ // => 分组引用就是通过 '\数字' 让其代表和对应分组出现一模一样的内容
console.log(reg.test('book')) // => true
console.log(reg.test('good')) // => true
console.log(reg.test('look')) // => true
console.log(reg.test('foot')) // => true
console.log(reg.test('fort')) // => false
正则的分组捕获
最新推荐文章于 2024-05-23 11:53:35 发布