题解 | #颜色字符串转换#

颜色字符串转换

http://www.nowcoder.com/practice/80b08802a833419f9c4ccc6e042c1cca

function rgb2hex(sRGB) {
    // 去除 sRGB 的空格
    const newSRGB = sRGB.replace(/\s+/g,"");
    // 定义 rbg 的正则表达式
    const exp = /rgb\((0|1\d{0,2}|2[0-5]{2}),(0|1\d{0,2}|2[0-5]{2}),(0|1\d{0,2}|2[0-5]{2})\)/;
    // 若不符合规则,则返回原字符串
    if (!exp.test(newSRGB)) return sRGB
    // 剔除 'rgb(' 和 ')', 剩下 'xx,xx,xx' 的字符串
    const rgbString = newSRGB.substring(4, newSRGB.length - 1)
    // 拆分上述字符串,生成数组
    const arr = rgbString.split(',')

    let color = '#'
    // 遍历数组,将每个元素转成16进制的字符串
    for (const item of arr) {
        console.log(item)
        const str = Number(item).toString(16)
        color += str.length === 2 ? str : `0${str}` 
    }
    return color
}
全部评论
你这个有错吧,在判断rgb输入格式是否正确的时候。(0|1\d{0,2}|2[0-5]{2})——前面是0-199 后面是200-255,但是[0-5]的规则,那249就返回false了,应该是[0-9]。
2 回复
分享
发布于 2021-10-26 10:57
要不最后一项改成(2[0-4][0-9])|(2[0-5][0-5])这样?就不会出现249为false或者超过255的情况
点赞 回复
分享
发布于 2022-11-13 23:00 江苏
联想
校招火热招聘中
官网直投
抱歉我有点不太懂,若数字是3开头或4开头等等,(0|1\d{0,2}|2[0-5]{2})不是匹配不上了吗,rgb(55,55,55)的话就会返回false了呀,还是说不会出现这样的数字?
点赞 回复
分享
发布于 2023-03-05 18:40 浙江

相关推荐

11 2 评论
分享
牛客网
牛客企业服务