先用正则去匹配合法的rgb 不合法直接返回原参数

  1. 用exec()捕获rgb
  2. 把rgb字符串格式转化为数字
  3. 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);
    }