捕获性分组
捕获性分组—返回匹配的字符串、所有子串
例如:
var pattern = /([a-z]+)([0-9]+)/;
var str = 'happy123';
var res = pattern.exec(str);
alert(res);
执行结果:
[a-z]+匹配的是字符串‘happy’
[0-9]+匹配的是字符串‘123’
使用()括起来,表示这是一个子串
使用exec()返回的是一个数组,数组第一个元素为匹配的整个字符串,后面依次为匹配的子串
例如以上例子执行如下语句:
alert(res[0]);
alert(res[1]);
alert(res[2]);
结果依次为:
非捕获性分组
非捕获性分组—返回匹配的字符串、非所有子串
非捕获性分组需在正则匹配子串部分加上—问号+冒号 ?:
这样加上 ?: 的子串就不会出现在输出的数组中
例如:
var pattern = /([a-z]+)(?:[0-9]+)/;
var str = 'happy123';
var res = pattern.exec(str);
alert(res);
执行结果:
在匹配数字字符串‘123’的正则子串([0-9]+)前加入了‘?:’—变成‘(?:[0-9]+)’,表示该子串不需要捕获,返回的数组不包含该子串,其他子串如果也不需要捕获,像此例一样在子串的‘()’中最前面的部分加上‘?:’即可
前瞻性捕获
子串加—问号+等号 ?=
匹配成功后,返回添加了 ?= 的子串前的字符串
例如:
var pattern = /color(?=ful)/;
var str = 'colorful';
var res =pattern.exec(str);
alert(res);
数组返回结果:
该例中,color后面只有跟的是‘ful’,才会返回color,如果不是,则不返回color,如下:
var pattern = /color(?=ful)/;
var str = 'colorless';
var res =pattern.exec(str);
alert(res);
返回结果: