文章目录

题目1 写一个字符串转成驼峰的方法

如:”border-bottom-color”->“borderBottomColor”

str = 'border-bottom-color';

//用原生方法实现
function toCamelCase(str){
	var arr = [];
	arr = str.split('-');
	for(var i=1;i<arr.length;i++){
		arr[i] = arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
	}
	return arr.join('');

}

alert(toCamelCase(str));
str = 'border-bottom-color';

//正则实现
function toCamelCase(str){

	var re = /(-\w)/g

	str = str.replace(re,function($0){
		return $0.substring(1).toUpperCase();
	})
	return str;

}

alert(toCamelCase(str));

由于之前没有看到过replace中还有函数的参数写法,就去网上查了下资料,不得不说,正则的replace还是挺强大的。

题目2 查找字符串出现最多的字符和个数

如”sdfafdfafafadfeseoiw” ->

str = 'sdfafdfafafadfeaseoiw';

//用原生方法实现
function toFindMost(str){
	var most ={};
	var num = 0;
	var x = '';
	for(var i=0;i<str.length;i++){
		var alpha = str.charAt(i);
		if (!most[alpha]) {
			most[alpha] = 1;
		}else{
			most[alpha] = most[alpha]+1;
		}
	}
	for(var attr in most){
		if (most[attr]>num) {
			x=attr;
			num = most[attr];
		}
	}
	alert('出现最多的是:'+x+'总过出现了:' + num + '次');
}
toFindMost(str);

随便写了下,刚刚发现了一个小bug,如果最多的两个是一样的,只会显示先出现的。

str = 'sdfafdfafafadfeaseoiw';

//用正则方法实现
function toFindMost(str){
	var arr = str.split('');
	var str2 = arr.sort().join('');
	var re = /(\w)\1+/g;

	var num = 0;
	var x = '';

	str2.replace(re,function($0,$1){
		if (num<$0.length) {
			num = $0.length;
			x = $1;
		}
	})

	alert('出现最多的是:'+x+'总过出现了:' + num + '次');
}
toFindMost(str);

题目3 如何给数字加上千分符。

str = '22324345545244';
//用原生方法实现
function addCommas(str){
	var arr =[];
	var more = str.length%3;
	var moreStr = '';
	if (more) {
		moreStr = str.substring(0,more);
		str = str.substring(more);
	}
	
	for(var i=1;i<=str.length;i++){
		if (i%3==0) {
			arr.push(str.substring(i-3,i));
		}
	}
	
	return moreStr +','+arr.join(',');

}
alert(addCommas(str));
//用正则的方法实现
str = '22324345545244';
function addCommas(str){
	var re = /(?=(?!\b)(\d{3})+$)/g;
	return str.replace(re,',');

}
alert(addCommas(str));

题目4 返回一个只包含数字类型的一个数组;

如:’js123ldka78sdasejl654’ ->[123,78,654]

str = 'js123ldka78sdasejl654';

//正则

function findNum(str){
	var re = /\d+/g;
	var arr = [];
	arr.push(str.match(re));
	return arr;
}

alert(findNum(str));
str = 'js123ldka78sdasejl654';

//原生方法

function findNum(str){
	var arr = [];
	for(var i=0;i<str.length;i++){
		if (Number(str.charAt(i))) {
			for(var j=0;j<str.length-i;j++){
				if (!Number(str.charAt(i+j+1)) || j==str.length-i-1) {
					arr.push(str.substring(i,i+j+1));
					break;
				}
			}
			i=i+j;
		}
	}
	return arr;
}

alert(findNum(str));

题目5 讲一个长度不超过5位的正整数转换成对应的中文字符串

num = 20876->‘两万零八百七十六’

var num = 20876;

function numToChinese(num){
var numC = ['零','一','二','三','四','五','六','七','八','九'];
var unit = ['','十','百','千','万'];

var str = num + '';
var arr =[]
for(var i=0;i<str.length;i++){

	arr.push( numC[Number(str.charAt(i)) ] );

}
for(var i=0;i<arr.length;i++){
	if (arr[i]==arr[i+1]||arr[i]==0) {
		arr[i]='';
	}
}
arr = arr.reverse();
for(var i=0;i<arr.length;i++){
	if (arr[i]!='' && arr[i]!='零') {
		arr[i]=arr[i]+unit[i];
	}
}
return arr.reverse().join('') 
}

alert(numToChinese(num));

好吧,今天就先写这么多,感觉正则还是要多练习一下。

我是一个刚刚闯进前端的小学生,如果上文中有什么错误的地方,还请您指正,不甚感激!

总浏览数:
总访客数: