首先正则验证是否是有效rgb,无效则直接返回。然后再全局正则匹配数字,最后转成16进制输出即可。
function rgb2hex(sRGB) { let p = /rgb\((\d{1,3}\,\s*){2}\d{1,3}\)/; if(!p.test(sRGB)){return sRGB} let nums = sRGB.match(/\d{1,3}/g); let res = '#'; for (const x of nums){ let tmp=parseInt(x).toString(16); res += tmp.length==1?'0'+tmp:tmp; } return res; }