题目描述
将 rgb 颜色字符串转换为十六进制的形式,如 rgb(255, 255, 255) 转为 #ffffff
1. rgb 中每个 , 后面的空格数量不固定
2. 十六进制表达式使用六位小写字母
3. 如果输入不符合 rgb 格式,返回原始输入
示例1
输入
'rgb(255, 255, 255)'
输出
#ffffff
注意点
考的知识点两个:
1. 正则表达式匹配;
2. toString(16)转换进制;
做的过程中注意:
1. 数值超界(0-255)
2. 不足两位补零
答案
function rgb2hex(sRGB) {
var regexp=/rgb\((\d+),\s*(\d+),\s*(\d+)\)/;
var ret=sRGB.match(regexp);
if(!ret){
return sRGB;
}else{
var str='#';
for(var i=1;i<=3;i++){
var m=parseInt(ret[i]);
if(m<=255&&m>=0){
str+=(m<16?'0'+m.toString(16):m.toString(16)); //如果数字小于16,就是1位,比如11转换成16进制的两位那就是0B;如果大于16小于255,那直接就是2位
}else{
return sRGB;
}
}
return str;
}
}
运行环境:JavaScript (V8 6.0.0)
运行时间:1061ms
占用内存:77860KB