捕获组的括号从左到右编号,正则引擎会记录每个分组匹配内容,并允许在模式或替换字符串中引用它
/([\d]{4})-([\d]{2})-([\d]{2})/.exec("2019-07-02"); // 捕获年月日
/**
匹配结果数组:["2019-07-02", "2019", "07", "02", index: 0, input: "2019-07-02", groups: undefined]
数据[0]:完整匹配字符串
数组[1]:捕获“年”
数组[2]:捕获“月”
数组[3]:捕获“日”
**/
捕获分组括号允许嵌套,在这种情况下,捕获数据组编号也从左到右编号
/(([\d]{4})-([\d]{2})-([\d]{2})) ([\d:]+)/.exec("2019-07-02 10:45:28"); // 捕获日期,年月日,时间
/**
匹配结果数组:["2019-07-02 10:45:28", "2019-07-02", "2019", "07", "02", "10:45:28", index: 0, input: "2019-07-02 10:45:28", groups: undefined]
数据[0]:完整匹配字符串
数组[1]:捕获“日期”
数组[2]:捕获“年”
数组[3]:捕获“月”
数组[4]:捕获“日”
数组[5]:捕获“时间”
**/
通过给捕获组中的括号命名,可以方便访问到指定的组,而不需要去一个个的数编号
/(?<date>(?<y>[\d]{4})-(?<m>[\d]{2})-(?<d>[\d]{2})) (?<time>[\d:]+)/.exec("2019-07-02 10:45:28");
// 捕获分组命名:date:日期,y:年,m:月,d:日,time:时间
/**
匹配结果数组:
[
"2019-07-02 10:45:28",
"2019-07-02",
"2019",
"07",
"02",
"10:45:28",
index: 0,
input: "2019-07-02 10:45:28",
groups: {
y: "2019",
m: "07",
d: "02",
date: "2019-07-02",
time: "10:45:28"
}
]
数据[0]:完整匹配字符串
数组[1]:捕获“日期”
数组[2]:捕获“年”
数组[3]:捕获“月”
数组[4]:捕获“日”
数组[5]:捕获“时间”
groups.date:捕获“日期”
groups.y:捕获“年”
groups.m:捕获“月”
groups.d:捕获“日”
groups.time:捕获“时间”
**/
指括号分组中的内容无需捕获,不出现在匹配结果数组元素中;当我们需要括号来正确应用量词,但不希望使用分组结果中的内容,则可使用非捕获组
/(?:([\d]{4})-([\d]{2})-([\d]{2})) (?:[\d:]+)/.exec("2019-07-02 10:45:28");
// 捕获年月日
/**
匹配结果数组:["2019-07-02 10:45:28", "2019", "07", "02", index: 0, input: "2019-07-02 10:45:28", groups: undefined]
数据[0]:完整匹配字符串
数组[1]:捕获“年”
数组[2]:捕获“月”
数组[3]:捕获“日”
**/