正则表达式学习
原文:http://www.qianduanzaixian.com/detail.do?id=40
1、有字符串"sjdkfljsdlkfsdkfsdklf",请使用效率最高的方法读取次数最多的字符,返回这个字符和个数
var str = "sjdkfljsdlkfsdkfsdklf"; //将字符串按字母顺序升序排序 var new_str = str.split("").sort().join(""); var num = -1; //定义一个变量存储最多字符的次数 var char = null;//定义一个变量存储最多出现的字符 var reg = /(\w)\1+/g; //当连续的字符相同时,\1+会让正则表达式不断的去截取,直到遇到不同的字符,然后把相同的字符串传递给替换函数的第一个参数,把单个字符值传给第二个参数 new_str.replace(reg,function(param1, param2){ //param1得到的是重复的字符组成的字符串,如:'ssss'; param2得到的是重复的是哪个字符,如's' if(param1.length > num){ num = param1.length; char = param2; } }); console.log(char+" : "+num); //说明:该正则表达式主要考察了\1+的语法。
2、将字符串grandFather 转换成grand_father; grandFatherMom 转换成grand_father_mom
var result = "grandFather ".replace(/[A-Z]/g, function($1){ //$1是函数变量,他的值是正则表达式/[A-Z]/g匹配到的值["F"],我们将"F"变成小写并补充"_"前缀即可 return "_"+$1.toLowerCase(); }); console.log(result);//输出grand_father var result2 = "grandFatherMom".replace(/[A-Z]/g, function($1){ //$1是函数变量,他的值是正则表达式/[A-Z]/g匹配到的值["F","M"],我们将大写转小写并补充"_"前缀即可 return "_"+$1.toLowerCase(); }); console.log(result2);//输出grand_father_mom
/**字符的一些替换操作效率最高的是使用正则表达式,str.replace是我们做该类操作会用到的非常重要的函数,因此,深入了解replace的特性会对我们有很大帮助: *replace使用总结如下: * * 字符替换,需要使用replace函数 * A.当replace函数第二参数是函数时 * 1).则该函数的第一个参数即是正则表达式匹配到的值(当正则表达式带有g这个属性时,则第二个函数会根据找到的结果循环遍历) * 2).函数返回值会替换到新的字符串中 * 3).返回的字符串并不修改原始字符串 * 4).第二个函数会有三个参数,第一个参数是匹配内容本身,第二个参数是匹配内容在字符串中的位置,第三个参数是原始字符串 * * B.当replace第二个参数是字符串时,只有使用$1,$2才能访问正则里的子表达式内容 * * 了解了以上细节,相信我们在去做相关字符串替换操作时会好处理很多了。*/