正则 exec方法 返回数组中 groups是用来存储什么值的?

var reg = /d+/;
var str = 'ac123abc456abc';
var result = reg.exec(str);
console.log(result);
//=> result: ["123", index: 2, input: "ac123abc456abc", groups: undefined]
//=> groups 作用是什么?

阅读 6.6k
2 个回答

groups是一个新的field,用来存储命名捕获组的信息:

let reg1 = /(\d)(\d)/
let str1 = '123'

console.log(reg1.exec(str1)) // => [12, 1, 2] 除去第一个以外的其他数据就是分组捕获到的数据,但是因为是一个数组,所以会存在一个记忆成本

// 命名捕获组的获取
let reg1 = /(?<first>\d)(?<second>\d)/
let str2 = '123'

console.log(reg2.exec(str2).groups) // => { first: 1, second: 2 } 而新的语法支持对这些捕获组进行命名,更方便地获取某个捕获组的数据

语法为:(?<捕获组的名字>捕获组对应的规则)

可以参考之前写的一篇文章,里边有提到:https://segmentfault.com/a/11...

将你的例子中 reg 改成 /(\d+)/ 其中的括号括住的部分叫“捕获”,对应英文是group。
exec中结果中的group用于列举 “有名有姓”的捕获。

再改一下 reg为 /(?<test>\d+)/,其中的?<test>代表捕获的“名字”为test,你执行一下,就会看到result.groups中多出一个名为test的属性,其中对应的值就是\d+匹配到得文本。

推荐问题
宣传栏