exec()和match()是不一样的。当使用非全局匹配时,两种方法的返回值是完全一样的。match和exec都只匹配一次,都会把组提取出来放在数组后面(function(){letstr="antzoane";letreg=/(a)(n)/;console.log(str.match(reg));console.log(reg.exec(str));})();当是全局匹配时,match方法返回一个数组,该数组存储所有匹配的内容(忽略子表达式匹配)。exex方法返回一个数组,不存储所有匹配,只存储第一个匹配的内容(存储在数字的第一个元素),第二个元素存储第一个子表达式匹配的内容,第三个元素存储匹配的内容第二个子表达式,依此类推(function(){letstr="antzoane";letreg=/a(n)/g;console.log(str.match(reg));console.log(reg.exec(str));//再次调用从lastindex开始匹配;console.log(reg.exec(str));})();match()和分组匹配varreg=/(\d{4})-(\d{2})-(\d{2})/;vardateStr='2018-04-18';vars=dateStr.match(reg);console.log(s)//arr[0]为匹配结果,arr[1]为第()中的匹配内容,全局匹配不会返回()中的内容varstr="hellomynameisben ,这是“;varreg2=/{1,}/g;varreg22=/(){1,}/g//()作为一个整体来匹配console.log(str.match(reg2));console.log(str.match(reg22));replace()并组捕获所有匹配添加修改varstr="0816-2323263";varreg=/(\d+)(-)(\d+)/g;varstr2=str.replace(reg,"($1)-$3");//所有匹配添加修改console.log(str2);//(0816)-2323263(?
