正则表达式学习

原文: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才能访问正则里的子表达式内容
 *
 * 了解了以上细节,相信我们在去做相关字符串替换操作时会好处理很多了。*/

 

 
 
posted @ 2017-09-11 10:19  薇微笑  阅读(218)  评论(0编辑  收藏  举报