【javascript】关于正则的面试题一

1.字符串或者数组去重(数组或者字符串中只出现字母)。


1). 重复的字符连续出现。例如:aaabbbcccddeeeee
function delRep(str){
    return str.replace(/(.)\1+/g,'$1');
}

delRep('aaabbbcccddeeeee'); //abcde

2).任意的重复字符串。 例如:aabcaddcssdxxzx

function delRep(str){
    var newStr = '';
    for(var i = 0; i < str.length; i++){
        newStr.indexOf(str.charAt(i)) == -1?newStr += str.charAt(i):'';
    }
    return newStr;
}
delRep('aabcaddcssdxxzx');//abcdsxz

2.英文段落字母出现次数统计。

function letSta(str){
    var obj = {};
    for(var i = 0;i < str.length; i++){
        if(/[a-zA-Z]/.test(str.charAt(i))){
            obj[str.charAt(i)]?obj[str.charAt(i)]++:obj[str.charAt(i)] = 1;
        };
    }
    return obj;
}
letSta('asfdasgwe sfad ,sadf ');//obj{a: 4,d: 3,e: 1,f: 3,g: 1,s: 4,w: 1}

3.统计英文段落中出现频率最高的字母和它出现的次数


首先调用前面的英文字母的统计;对结果进行查找返回。
但是必须注意的一点是:频率最高的不一定只有一个!
function letF(str){
    var oLets = letSta(str),maxNum = 0,maxLets = [];
    for(var i in oLets){
        if(oLets[i] > maxNum){
            maxNum = oLets[i];
            maxLets.splice(0,maxLets.length,i);
        }else if(oLets[i] == maxNum){
            maxLets.push(i);
        }
    }
    return {maxNum: maxNum,maxLets: maxLets}
}
letF('aaabbbcddddfrrrr');// {maxNum: 4,maxLets:['d','r']}

4.对一段英文中所有单词的首字母大写。


例如:'Study hard, make progress every day.’,变化后为:‘Study Hard, Make Progress Every Day.
function wordToUp(str){
    return str.replace(/\b\w+\b/g, function(word){ 
        return word.substring(0,1).toUpperCase()+word.substring(1);
        });
}
wordToUp('Study hard, make progress every day.');//<span style="color: rgb(34, 34, 34); font-family: Consolas, 'Lucida Console', monospace; font-size: 13.3333339691162px; white-space: pre-wrap;">Study Hard, Make Progress Every Day.</span>

同样,要是出现的为给数组实现这些方法可以用str.join('')转化为字符串调用后再用arr.split('')转化为数组。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值