当前位置: 首页 > Web前端 > HTML5

JavaScript正则化需要注意的事情

时间:2023-04-05 18:03:41 HTML5

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(?)and(?:exp)varstr1="123478basd-12aaaaa";varreg1=/(\d+)([a-z]+)(\d+)(?<重命名>[a-z]+)/g;varstr21=str1.replace(reg1,"$1hhhhh$");//(?)将文本捕获到名为name(?:exp)的组中匹配exp,不捕获匹配的文本,并且不给这个组分配一个组号console.log(str21);//123478basd-12aaaaa匹配需要删除的部分然后清空varstr23="123478basd12asdsa";varreg2=/[a-z]+/g;varstr22=str23.replace(reg2,"");//匹配需要删除的部分然后清空console.log(str22);//12347812贪心懒惰,在量词后加一个问号表示懒惰,匹配尽可能少?7/;varreg3=/8[a-zA-Z0-9]+?/;varres1=str.match(reg1);varres2=str.match(reg2);varres3=str.match(reg3);控制台日志(res1);控制台日志(res2);控制台日志(res3);零宽度断言(?=exp)正向查找(?<=exp)反向查找(?!exp)匹配后面的位置不是exp(?