从四月底到五月初,经历过了大大小小的笔试。回顾当时笔试情况,无一不是跪在js中的正则表达式。亡羊补牢才是真理。
(1)利用正则表达式计算一列字符串中,出现最多次数的字符以及其出现的个数。
这个题目也在YY面试中的笔试部分中出现过,当时只是用了最笨的办法,后来想想其实用正则表达式更简单。
思路就是,有一个很长的字符串,先把字符串变为数组(方便排序),使用sort函数对数组进行排序,然后利用join方法合并数组变为新的字符串。此时新的字符串中字符都是已经排好序。正则表达式 /(w)1+/g 表示:查找相同字符串。原理:w 指的是匹配字符(字符指:数字,字符,下划线);1需要配合()使用,重复子项;整体的意思就是重复括号中的字符串;+表示1个以上;整体效果就可以查找相同的字符串。
需要注意的是:replace方法中,第一个参数是正则,第二个参数可以是需要代换的新的字符串,也可以是一个回调函数,$0指的是整体字符串,$1只是哪个字符。可以使用console.log查看这两个参数。这样就容易理解这两个参数的含义。
1 var str1 = "The Mayo Clinic acknowledges that most doctors recommend drinking 6 to 8 glasses of water daily so you body functions perfectly. Drinking this amount of water every day will hydrate your body from the inside out, including a better function of your internal organs(stomach, kidneys, head) as well as making your external one(skin) radiant.";
2 var arr1 = str1.split('');
3 str1=arr1.sort().join('');
4 var re=/(w)1+/g;
5 var value=0;
6 var maxnum=0;
7 str1.replace(re,function($0,$1){
8 // console.log($0)
9 if(maxnum<$0.length){
10 maxnum=$0.length;
11 value=$1;
12 }
13 });
14 console.log('value:'+value+' maxnum:'+maxnum);
(2)利用正则表达式,去掉字符串中的标签。
正则表达式中, /<[^>]+>/g 表示: g的意思是全局;因为标签的特征是<>具有尖角符号,尖角符号中的元素名称都可看成是字符,包括class类选择器等。从而可以匹配开始标签和闭合标签。
1 //假设有一段字符串还有标签
2 var str = "<h1 class="title">美国社会心理学大师奥尔波特说</h1>";
3
4 //设一个正则
5 var re1=/<[^>]+>/g;
6
7 //声明一个变量newstr来放置改变后的字符串
8 var newstr=str.replace(re1,"");
9 //后台输出
10 console.log('str1'+str1);
(3)利用正则表达式,去除敏感字眼。
CVTE中面试官有个问就是:在论坛中,如果有评论是比较敏感的词语,该如何去除?
利用正则表达式能够匹配到关键敏感词,如果需要使用*之类的字符屏蔽掉,可以用回调函数,replace中回调函数第一个参数就是能够匹配字符串,利用字符串长度,就可以计算出多少个*,然后返回代替元匹配字眼。
需要注意的是,正则表达式中,“|”表“或者”,下面的正则可以匹配多个敏感字眼。
1 var str = "美国社会心理学大师奥尔波特说,心理学领域写就的著作中,最有影响者,非勒庞的《乌合之众》莫属。";
2
3 //设置正则表达式
4 var re = /乌合之众|心理|勒庞/g;
5
6 //可以使用回调函数把关键字用*号代替
7 var str2 = str.replace(re, function (mystring) {
8 var result="";
9 for(var i=0; i<mystring.length;i++){
10 result+="*";
11 }
12 return result;
13 });
14
15 console.log('str2'+str2);