使用字符串 test 方法实现正则的捕获

不管是正则的匹配还是正则的捕获,在处理时候的原理是没区别的:从字符串的第一个字符向后查找,找到符合正则规则的字符,如果可以找到,说明正则和字符串匹配(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第二个分组 ...