阿里笔试题(二)——正则表达式

题目:

请编写一个JavaScript 函数toRGB,它的作用是转换CSS中常用的颜色编码。 要求:

 

alert(toRGB("#0000FF"));          // 输出 rgb(0, 0, 255)

alert(toRGB("invalid"));          // 输出 invalid

alert(toRGB("#G00"));              // 输出 #G00



答:

var str = "#0000FF";
	
	document.write(toRGB(str));
	
	function toRGB(str){
		var pattern1=/^#([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;
		var pattern2=/^#([0-9A-F])([0-9A-F])([0-9A-F])$/i;
		var result;
		if(pattern1.test(str)){
			result=pattern1.exec(str);
			
		}
		else if(pattern2.test(str)){
			result=pattern2.exec(str);
		}
		else{
			return str;
		}
		
		var str_r=RegExp["$1"];
		var str_g=RegExp["$2"];
		var str_b=RegExp["$3"];
		var r_num=HEXtoDEC(str_r);
		var g_num=HEXtoDEC(str_g);
		var b_num=HEXtoDEC(str_b);
		var css_color=[r_num,g_num,b_num].join(",");
		css_color="rgb("+css_color+")";
		return css_color;
	}
	
	function HEXtoDEC(str)
	{
		var hex_num="0x"+str;
		var num=parseInt(hex_num);
		return num;
	}
上述代码需要注意的!:模式中 有两个限定符,一个^一个$,分别限定匹配的开始和结尾。另外!!一个很神奇的事情是,直接用$1获取分组,则出现错误。如下代码获取无论是FF,还是IE都是有问题的!!

/*
		var str_r="$1";
		var str_g="$2";
		var str_b="$3";
		var str_r=$_1;
		var str_g=$_2;
		var str_b=$_3;
		*/
只能用 RegExp["$1"]的静态属性才可以。

另外~ 一个C语言的习惯。。。。定义函数后面的形参习惯加上var,例如function HEXtoDEC(var str),但是!!!这样编译出错。。。。

函数parseInt是一个很有用的函数,它可以转换到各种进制。案例中的转换是一种方式,另外我们可以用另一种方法。因为parseInt可以接收第二个可选参数,这个参数指定数字转换的基数,合法的取值范围是2~36。例如:

parseInt("11",2);  //=>3 (1*2+1)
parseInt("ff",16);  //=>255 (15*16+15)

哦~ 忘记了!还有一个有趣的是,例子中关于数字整合的处理,用到了数组的方法 join~~~这个挺方便而且简明还效率高。


文中提取R,G,B三个参数可以用到match方法。例如:

<span style="background-color: rgb(255, 204, 204);">var pattern3=/[0-9A-F]{2}/g;  //g开启全局匹配,如果不开启全局匹配,下面的m只有一个值,就是m[0]=00;
var m=str.match(pattern3);  //m[0]=00, m[1]=00, m[2]=FF;
var val=m.join(",");</span>
不管你信不信,反正本人看到另一个匹配方式很兴奋!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值