利用工作的间隙, 昨天做了论坛里的第二个题目,边思考边查询,温习了很多知识,还学习了很多优秀同学提交的作业,有两个同学的作业印象最深。
题目如下:
印象最深的两个作业,要看懂还真是花了一番功夫的,不过也学到了挺多。
第一个同学提交的作业,亮点在于灵活运用了split、join属性,简直太聪明了。我比较喜欢在理解了别人的代码之后,再一个字一个字敲下来,这样也顺便加深我的理解和记忆。第一个同学的作业,我的温顾如下:
<script>
var str = "aabbddeeeeefdxxxd";
function maxCharOf(){
var strClone=str,num=0,char="",arr,length;
while(strClone.lenth>0){
arr=strClone.split(strClone[0]);
length=arr.length-1;
if(length>num){
num=length;
char=strClone[0];
}else if(length==num){
char+="&"+strClone[0];
}
strClone=arr.join("");
}
console.log("重复个数最多的字符是"+char+",个数为"+num);
}
maxCharOf(str);
</script>
------------------------------------------------------------------
还有一位同学的作用使用了正则以及replace()方法,做得也挺不错的。
<script>
var str = "aabbddeeeeefdxxxd";
var arr=str.split("");
str=arr.sort().join("");
var value="";
var index=0;
var reg=/(/w)/1+/g;
str.replace(reg,function($0,$1){
if($0.length>index){
index=$0.length;
value=$1;
}
})
console.log(""重复个数最多的字符是"+value+",个数为"+index");
</script>
------------------------------------------------------------------------
通过琢磨研究两位同学提交的作业,温习了许多旧知识,像字符串和数组间转换的split()、join()方法,还有数字的排序sort()方法。另外还有正则表达式,replace()方法等等,比较深刻的就小结一下:
1.正则表达式:/g表示全局匹配,/i表示忽略大小写匹配,/s表示匹配空格,/d表示匹配数字,/n表示匹配换行符等,[]表示匹配中括号内任意一个,()指的是一个匹配子项,若干子项交集才是最终匹配项。
运用正则进行验证的方法有:
reg.test(str);----返回true或者false;
str.search(reg);-----返回第一个匹配的字母的下标位置或者-1;
str.match(reg);-----返回匹配的内容或者null;如果reg不加/g,那么返回匹配结果及每个子项的集合。
另外还有,查找替换的方法。str.replace(resouce,replacement);----第一个参数可以是字符串或者正则表达式,第二个参数可以是字符串、函数或者特殊字符如$1等等。 用第二个参数替换第一个参数。
2. replace()方法的第一个参数可以是一个正则表达式,第二个参数还可以是一个函数,也可以是像$0、$1、$2、$3……这样的特殊字符,这些特殊字符有着特殊的意义。
$0,指的是匹配成功后的整体结果(如果正则中含/g,那就是这次全局匹配完成之后的整体结果,字符串的形式)。
$1,匹配成功的第一个子项分组(所谓子项,指的正则表达式中其中一个匹配条件)。
$2,匹配成功的第二个子项分组
$3,依次类推,一直到$n。