思路:正则表达式。首先使用正则表达式匹配rgb(a,b,c)这种形式,然后使用match方法获取匹配内容,接着使用toString(16)方法将表示r、g、b的整数各自转换为两位的16进制字符串形式,最后使用toLowerCase方法将其全部转换为小写形式。
function rgb2hex(sRGB) { // 其中\(表示匹配左括号 \s*表示匹配空白字符任意次 const match = sRGB.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); if (match) { const [, r, g, b] = match; // 解构匹配结果 const hexColor = `#${twodigit(r)}${twodigit(g)}${twodigit(b)}`; return hexColor.toLowerCase(); } else { return sRGB; } function twodigit(n) { //rgb(0,0,0) let s=Number(n).toString(16) return s.length==2?s:'0'+s } }
总结:string.match(regexp)方法用于在字符串中匹配与指定正则表达式相匹配的内容并返回一个数组,数组的第一项是完整的匹配内容,后面几项是捕获组的匹配内容,捕获组即以括号括起来的部分, ["rgb(255, 255, 255)", "255", "255", "255"]即为上述结果,如果未找到匹配项,则返回null。str.toLowerCase()方法将字符串str全部转换为小写形式。