在CSS中经常要将rgb()格式转换为16进制格式,我是通过正则表达式来实现的。
function rgb2hex(sRGB) {
let re = /rgb\((\d+),\s*(\d+),\s*(\d+)\)/,
ret = sRGB.match(re),
head = "#";
if(!ret) return sRGB;
else {
//match匹配的数组第一项为自身
for(let i = 1; i < ret.length; i++) {
//将字符串转化为数字
let x = parseInt(ret[i]);
if(x >= 0 && x <= 255) {
//将0-255之间的数字变为16进制
//小于16的首位补个0
head += x < 16 ? '0' + x.toString(16) : x.toString(16);
//否则返回sRGB
} else return sRGB;
}
}
return head
}
const x = 'rgb(122, 122, 122)';
rgb2hex(x); //#7a7a7b