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

颜色字符串转换

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
抱歉我有点不太懂,若数字是3开头或4开头等等,(0|1\d{0,2}|2[0-5]{2})不是匹配不上了吗,rgb(55,55,55)的话就会返回false了呀,还是说不会出现这样的数字?
点赞 回复 分享
发布于 2023-03-05 18:40 浙江
要不最后一项改成(2[0-4][0-9])|(2[0-5][0-5])这样?就不会出现249为false或者超过255的情况
点赞 回复 分享
发布于 2022-11-13 23:00 江苏

相关推荐

03-21 08:46
已编辑
门头沟学院 C++
一个什么都不会的学生:当你有硕士学历的时候HR会说就是比本科生强
点赞 评论 收藏
分享
05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
评论
12
2
分享

创作者周榜

更多
牛客网
牛客企业服务