我的数据属性包含十六进制颜色列表。
<span data-color="#ffffff,#000000"></span>
我目前拆分列表“,”以获得真实数组。
但是现在这些标签的数据属性开始出现 rgba colors 。
<span data-color="rgba(255,255,255,.75),#000000"></span>
当然,拆分解决方案不再适用了。
什么是最好的工作?
我的意思是,我之前可以验证“,”是否没有“)”,但必须有一个更优雅的解决方案......
答案 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) || [];
答案 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)';
}