首先正则验证是否是有效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;
}