先用正则去匹配合法的rgb 不合法直接返回原参数
- 用exec()捕获rgb
- 把rgb字符串格式转化为数字
- rgb对应数字左移16 8 位后转化为16进制可以对应 ff ff ff这样的格式 1位移24位 最后把1截掉是为了把rgb(0,0,0)转化为#000000 前面用了数组的方法 感觉还是位运算快
function rgb2hex(sRGB) {
let regExp = /^rgb\(([0-9]{1,3}),\s*([0-9]{1,3}),\s*([0-9]{1,3})\)$/;
let resArr = regExp.exec(sRGB);
let r = parseInt(resArr[1]),
g = parseInt(resArr[2]),
b = parseInt(resArr[3]);
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}