牛客网刷题27—颜色字符串转换

51.颜色字符串转换

题目链接
https://www.nowcoder.com/practice/80b08802a833419f9c4ccc6e042c1cca?tpId=2&&tqId=10860&rp=1&ru=/activity/oj&qru=/ta/front-end/question-ranking
题目描述
将 rgb 颜色字符串转换为十六进制的形式,如 rgb(255, 255, 255) 转为 #ffffff

  1. rgb 中每个 , 后面的空格数量不固定
  2. 十六进制表达式使用六位小写字母
  3. 如果输入不符合 rgb 格式,返回原始输入

示例1
输入
‘rgb(255, 255, 255)’
输出
#ffffff
重难点

  1. rgb 颜色字符串的正则表达式。
  2. 二进制转16进制时要注意题目中第二点要求:十六进制表达式使用六位小写字母。

题目分析

  1. 写rgb 颜色字符串的正则表达式,判断输入是否符合rgb 颜色字符串的格式;
  2. 若符合rgb颜色字符串的格式,用(分割字符串并去除所有空格;
  3. 删除),用,分割字符串;
  4. 将字符串转成整型数字,若数字>=0 && <= 255,转成16进制;
  5. 注意:转成16进制时要判断一下数字是否大于16,不大于16的时候需要补0。
    法一:
function rgb2hex(sRGB) {
    var reg = /^rgb\((\d+),\s*(\d+)\s*,\s*(\d+)\)/;
    var res = "#";
    if(reg.test(sRGB)){
        //用(分割字符串并去除所有空格
        var rgb = sRGB.split('(')[1].replace(/\s+/g,"");
        //删除)
        var numSrt = rgb.replace(')','');
      //用,分割字符串
        var num = numSrt.split(',');
        for(var i=0;i<num.length;i++){
            var numInt = parseInt(num[i]);
            if(num[i] >= 0 && num[i] <= 255){
                res += numInt<16? ('0'+numInt).toString(16):numInt.toString(16);
 
            }else{
                return sRGB;
                break;
            }
        }
        return res;
    }else{
        return sRGB;
    }
}   

法二:使用match

function rgb2hex(sRGB) {
   var reg = /rgb\((\d+),\s*(\d+),\s*(\d+)\)/
    var num = sRGB.match(reg);  // 数组长度为4,第一个元素为完整匹配,后三个元素为匹配的子表达式
    var res = '#'
    if(num){
        for(var i=1;i<num.length;i++){
             var numInt = parseInt(num[i]);
            if(num[i] >= 0 && num[i] <= 255){
                res += numInt<16? ('0'+numInt).toString(16):numInt.toString(16);
                 
            }else{
                return sRGB;
            }
        }
        return res;
    }else{
        return sRGB;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值