不管是正则的匹配还是正则的捕获,在处理时候的原理是没区别的:从字符串的第一个字符向后查找,找到符合正则规则的字符,如果可以找到,说明正则和字符串匹配(test检测返回true、exec捕获返回捕获的内容),如果找到末尾都没有匹配的,说明正则和字符串不匹配(test检测返回false、exec捕获返回null)
如果正则设置了修饰符g,不管使用test还是exec中的任何方法,都会修改lastIndex值(下一次查找是基于上一次匹配结果的末尾开始查找的)
//=>如果当前字符串和正则是匹配的,我们进行捕获 var reg = /{(d+)}/g; var str = 'my name is {0}~~'; if (reg.test(str)) { //=>reg.test(str) : true console.log(reg.lastIndex);//=>14 console.log(reg.exec(str));//=>null } var reg = /{(d+)}/; var str = 'my name is {0}~~'; if (reg.test(str)) { //=>reg.test(str) : true console.log(reg.lastIndex);//=>0 console.log(reg.exec(str));//=>['{0}','0'...] }
使用test不仅可以找到匹配的内容,也能像exec一样把找到的内容获取到
test返回结果是 true/false,所以靠返回结果肯定不行
var reg = /{(d+)}/g; var str = 'my name is {0}~~,i am {1} years old~~'; reg.test(str);//=>true console.log(RegExp.$1);//=>0 获取到当前本次匹配内容中第一个小分组捕获的内容 reg.test(str);//=>true console.log(RegExp.$1);//=>1 TEST可以实现捕获,但是每一次只能获取到当前本次匹配结果中, 第N个分组捕获的内容 $1第一个分组 $2第二个分组 ...