Rgb颜色和十六进制颜色值的相互转换

前言:最近答了各大厂的笔试题,答得都很不好,还是基础太差了,尤其在正则表达式方面老是不会写,今天就做两个练习题巩固一下。


一. 将rgb颜色值转换为十六进制值输出,转换前验证rgb的格式是否正确

关于这个题主要就是考察正则表达式的运用了

1 . 验证rgb的正则表达式:

var reg = /^rgb\((\s*[1-2]?[0-9]?[0-9]{1}\,)(\s*[1-2]?[0-9]?[0-9]{1}\,)(\s*[1-2]?[0-9]?[0-9]{1})\)$/;

2 . 如何获取rgb中的颜色值 :

方法一:

var matches = reg.exec(rgb);
console.log(matches[1], matches[2], matches[3]);

方法二:

console.log(RegExp.$1, RegExp.$2, RegExp.$3);

3 . 完整代码:

function changeRgbColorToHex(rgbColor){

        var reg = /^rgb\((\s*[1-2]?[0-9]?[0-9]{1}\,)(\s*[1-2]?[0-9]?[0-9]{1}\,)(\s*[1-2]?[0-9]?[0-9]{1})\)$/;

        if (reg.test(rgbColor)){
            var matches = reg.exec(rgbColor);
            var hexColor = '#';
            for (var i = 1; i <= 3; i++){
                if (parseInt(matches[i]) < 16){
                    hexColor += '0' + parseInt(matches[i]).toString(16)
                }else{
                    hexColor += parseInt(matches[i]).toString(16);
                }
            }
        }

        return hexColor;
    }

二. 十六进制颜色值转换为Rgb颜色值

相比上一个转换的正则,这个正则简单多了,不做多的解释直接上代码:

function changeHexColorToRgb(hexColor){
        var hex = '#f0f0f0';
        var reg = /^\#[a-fA-f0-9]{6}$/;
        if (reg.test(hex)){
            var rgbColor = 'rgb('
            for (var i = 1; i < hexColor.length; i+=2){
                var str = hexColor[i] + hexColor[i + 1];
                if (i < 5){
                    rgbColor += parseInt(str, 16) + ',';
                }else{
                    rgbColor += parseInt(str, 16) + ')';
                }

            }
        }

        return rgbColor;
    }

三. 运行结果

var hexColor = changeRgbColorToHex('rgb(255, 0, 0)');
var rgbColor = changeHexColorToRgb('#f0d0c0');
console.log(hexColor, rgbColor);

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值