拆分包含rgba值的颜色列表

时间:2014-10-16 14:59:05

标签: javascript jquery arrays custom-data-attribute

我的数据属性包含十六进制颜色列表。

<span data-color="#ffffff,#000000"></span>

我目前拆分列表“,”以获得真实数组。

但是现在这些标签的数据属性开始出现 rgba colors

<span data-color="rgba(255,255,255,.75),#000000"></span>

当然,拆分解决方案不再适用了。
什么是最好的工作?

我的意思是,我之前可以验证“,”是否没有“)”,但必须有一个更优雅的解决方案......

4 个答案:

答案 0 :(得分:2)

使用正向前瞻的简洁正则表达式。

var string = "rgba(255,255,255,.75),#000000";
string.split(/(?:,(?=#)|,(?=r))+/);

返回

["rgba(255,255,255,.75)", "#000000"]

使用hex,rgb和rgba颜色。

答案 1 :(得分:0)

这是一个非常简单的正则表达式解决方案,我只是简单地通过&#34;,#&#34;或&#34;),&#34;

var string = 'rgba(255,255,255,.75),#000000';
var split = string.split(/,#|\),/));

答案 2 :(得分:0)

在您的情况下,最好使用另一种方法:通过一个Regexp查找两种颜色模式。

// v - attribute value
var result = v.match(/(?:#[\da-f]{3,6}|rgba\(\d{1,3}\,\d{1,3}\,\d{1,3}\,[\d.]+\))/g) || [];

Demo

答案 3 :(得分:0)

没有正则表达式的解决方案是将十六进制值转换为rgba值:

function parse(str)
{
    while (str.indexOf('#') >= 0)
    {
        var hex = str.substr(str.indexOf('#'), 7);
        str = str.replace(hex, rgba_from_hex(hex));
    }
    return str.split('rgba');
}

function rgba_from_hex(hex) // expects format '#rrggbb'
{
    return 'rgba(' + parseInt(hex.substr(1, 2), 16) + ',' + parseInt(hex.substr(3, 2), 16) + ',' + parseInt(hex.substr(5, 2), 16) + ', 1)';
}