题目描述:
完成函数 hexToRGB
,它的作用将 16 进制颜色值转换成 RGB 值:
hexToRGB('#F0F0F0') // => rgb(240, 240, 240)
hexToRGB('#9fc') // => rgb(153, 255, 204)
hexToRGB('无效颜色') // => null
思路:
16进制转十进制如何计算。A,B,C,D,E,F,不区分大小写这六个字母分别表示10,11,12,13,14,15 首先判断是否是16进制的颜色,特点以#号开头,其余是字母和数字,6位或者3位。 正则匹配如何只匹配3位数字或字母,或只匹配6位数字或字母
参考答案:
const hexToRGB = (hex) => {
if(!/^\#([a-fA-F0-9]{3})$/g.test(hex) && !/^\#([a-fA-F0-9]{6})$/g.test(hex)) return null
let len = hex.slice(1).length;
let str = len === 6 ? hex.slice(1) : hex.slice(1)[0].repeat(2) + hex.slice(1)[1].repeat(2) + hex.slice(1)[2].repeat(2);
let arr_str = str.split('');
let new_arr_str = arr_str.map((item, index) => {
if(item === 'a' || item === 'A') {
return 10
} else if(item === 'b' || item === 'B') {
return 11
} else if(item === 'c' || item === 'C') {
return 12
} else if(item === 'd' || item === 'D') {
return 13
} else if(item === 'e' || item === 'E') {
return 14
} else if(item === 'f' || item === 'F') {
return 15
} else {
return Number(item);
}
})
let num1 = new_arr_str[0] * 16 + new_arr_str[1];
let num2 = new_arr_str[2] * 16 + new_arr_str[3];
let num3 = new_arr_str[4] * 16 + new_arr_str[5];
return `rgb(${num1}, ${num2}, ${num3})`
}