彻底理解正则 (2)

str.match(reg) 在字符串中搜索符合规则的内容,成功则返回数组内容,失败则返回null

var str = 'abc123def45g6hijkl789'; var reg1 = /\d+/g; // 每次匹配至少一个数字 且全局匹配 console.log( str.match(reg1)); // [123,45,6,789] var reg2 = /\d+/; console.log(str.match(reg2)); // ["123", index: 3, input: "abc123def45g6hijkl789", groups: undefined] var reg3 = /\d/; console.log(str.match(reg3));//["1", index: 3, input: "abc123def45g6hijkl789", groups: undefined] var reg4 = /\d/g; console.log(str.match(reg4)) // ["1", "2", "3", "4", "5", "6", "7", "8", "9"] 由这四个例子可知,全局匹配,得出的结果是一个数组,如果不是全局匹配,当找到数字123,它就会停止了。就只会弹出123,类似与exec()的结果。加上全局匹配,就会从开始到结束一直去搜索符合规则的。如果没有加号,匹配的结果就是["1", "2", "3", "4", "5", "6", "7", "8", "9"],有了加号,每次匹配的数字就是至少一个了。

str.search(reg) 在字符串中搜索符合正则内容的索引,如果不存在,则返回-1。

var str = 'abcdefg'; var reg1 = /B/i; console.log(str.search(reg1)) // 1 var reg2 = /B/; console.log(str.search(reg2)) // -1

str.replace(reg,new str/callback)
参数解释: 第一个参数reg:要匹配的正则内容,
第二个参数new str/callback。callback,回调函数里也有三个参数:1 匹配的字符,2 匹配字符的索引,3 源字符串。

var str = '我爱北京天安门,天安门上太阳升' var reg = /北京|天安门/g console.log(str.replace(reg,'*')) // 我爱**,*上太阳升 var str = "我爱北京天安门,天安门上太阳升。"; var re = /北京|天安门/g; // 找到北京 或者天安门 全局匹配 var str2 = str.replace(re,function(str){ console.log(str); //用来测试:函数的第一个参数代表每次搜索到的符合正则的字符,所以第一次str指的是北京 第二次str是天安门 第三次str是天安门 var result = ''; for(var i=0;i<str.length;i++){ result += '*'; } return result; //所以搜索到了几个字就返回几个* }); console.log(str2) //我爱*****,***上太阳升

额外例子:

1 找重复项最多的字符个数

var str = 'aibbicidhdieifigbdihdaii'; var arr = str.split(''); //把字符串转换为数组 str = arr.sort().join(''); //首先进行排序,这样结果会把相同的字符放在一起,然后再转换为字符串 console.log(str); // aabbbcddddefghhiiiiiiiii var value = ''; var index = 0; var re = /(\w)\1+/g; //匹配字符,且重复这个字符,重复次数至少一次。 str.replace(re,function($0,$1){ console.log($0); //代表每次匹配成功的结果 : aa dd jj kk l sssssssssssssssss console.log($1); //代表每次匹配成功的第一个子项,也就是\w: a d j k l S if(index<$0.length){ //如果index保存的值小于$0的长度就进行下面的操作 index = $0.length; // 这样index一直保存的就在最大的长度 value = $1; //value保存的是出现最多的这个字符 } }); console.log('最多的字符:'+value+',重复的次数:'+index); // 最多的字符:i,重复的次数:9

大写数字替换小写数字

var str = "2019"; var a = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"]; str = str.replace(/\d/g, function () { return a[arguments[0]]; }); console.log(str);//贰零壹玖 结尾

通过学习正则,发现正则不是很难,主要是因为没有往正则方面去想,正则无非就是几个字符加上方法就能匹配自己想要匹配的结果,在于尝试,尝试多了,自然而然就学会合理在项目中使用正则。
以上是我学习正则记录的笔记,我把笔记整理到了github上了,欢迎阅读,好的话给个star。大家如果觉得我有什么做的不对的,请下方评论或私信,一起进步加油!

参考资料

菜鸟教程

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfggx.html