(x) 捕获性圆括号:匹配x,并捕获匹配项。
(?:x) 非捕获性圆括号: 匹配x,但是不捕获匹配项。
正则表达式一般情况下的匹配道德字符串称为分组0,按照匹配项中圆括号出现的顺序会获得分组1,分组2……等等
例如:
console.log(/([0-9])/.exec('3 + 4'));
console.log(/(?:[0-9])/.exec('3 + 4'));
console.log(/[0-9]/.exec('3 + 4'));
console.log(/([0-9])(\s)/.exec('3 + 4'));
//输出
//["3", "3"] 后边的 3 就是捕获组所获取的,最后一个例子是有两个捕获组所以会有三个元素(包含分组0)
//["3"]
//["3"]
//["3 ", "3", " "]
补充: 当圆括号后跟有*时,那捕获组获得的是最后一个值,示例代码:
var str = 'For more information, see Chapter 3.4.5.1';
var re = /see (chapter \d+(\.\d)*)/i;
var found = str.match(re);
console.log(found);
// logs [ 'see Chapter 3.4.5.1',
// 'Chapter 3.4.5.1',
// '.1',
// index: 22,
// input: 'For more information, see Chapter 3.4.5.1' ]
// 'see Chapter 3.4.5.1' 是整个匹配。
// 'Chapter 3.4.5.1' 被'(chapter \d+(\.\d)*)'捕获。
// '.1' 是被'(\.\d)'捕获的最后一个值。
// 'index' 属性(22) 是整个匹配从零开始的索引。
// 'input' 属性是被解析的原始字符串。