短横变驼峰
student-man-xiaoming 变为studentManXiaoming
方法1:
(1)用字符串的split方法变为数组
(2)遍历数组每一项,首字母都变为大写,然后与剩余字母连接join
<script type="text/javascript" charset="UTF-8">
var str="student-man-xiaoming";
//拆为数组
var strArr=str.split("-");
console.log("第一步输出:"+strArr);
//遍历数组,驼峰第一项不变为大写
for(var i=1;i<strArr.length;i++){
var chars=strArr[i];
strArr[i]=chars[0].toUpperCase()+chars.slice(1);
}
console.log("第二步输出:"+strArr);
//join所有字符
console.log("最终结果输出:"+strArr.join(""));
</script>
方法2:
<script type="text/javascript" charset="UTF-8">
var str="student-man-xiaoming";
//用正则表达式替换replace
str=str.replace(/\-(\w)/g,function (match,$1) {
return $1.toUpperCase();
});
console.log(str);
</script>
寻找连续三项的字符串
“aabbbccddddee”返回[2,3,4,7,8,9,10]
双指针法99%能解决字符串问题。如:“最大连续相同的子串;最大连续重复子串”
<script type="text/javascript" charset="UTF-8">
var str="aabbbccddddee";
//指针的位置
var i=0;
var j=1;
var result=[];
//开始循环
while(i<str.length){
//判断指针所指的数字是否相等
if(str[i]!=str[j]) {
//再判断i和及是否相差3及以上
if (j - i >= 3) {
//若true,则将index放入result数组中
for (var m = i; m <= j - 1; m++) {
result.push(m);
}
}
i = j;
}
//相等或不相等,都j++
j++;
}
console.log(result);
</script>
给数字加上千分位符
12345678901,返回“12,345,678,901”
数组和字符串互换方法很好用,要敏感。实际上就是[12,345,678,901],然后join(“,”)。问题转化为:把12345678901拆分为数组!
<script type="text/javascript" charset="UTF-8">
var num=12345678901;
//获取数字位数
var length=num.toString().length;
//从-3位开始
var start=-3;
//向上取整3的倍数位结束
var end=-Math.ceil(length/3)*3;
//从-3位开始截取第一个片段
var result=[num.toString().slice(-3)];
console.log("第一段为:"+result);
//第一个片段以后,直到结束位,都每间隔3位截取一次
for(var i=start-3;i>=end;i-=3){
//逐渐向前插入片段
var str=num.toString().slice(i,i+3);
console.log("截取字段为:"+str);
result.unshift(str);
}
console.log("结果为:"+result);
</script>
<script type="text/javascript" charset="UTF-8">
var str="12345678901";
/*(?=)定语从句,$单词末尾
*从全局找距单词末尾3或3的倍数的数字,并将其间隙替换成","*/
str=str.replace(/\B(?=(\d{3})+$)/g,",");
console.log(str);
</script>