我有各种颜色定义,如下所示,
i.cat1{background:rgb(249, 115, 0);} // RGB with 3 params
i.cat2{background:rgba(14, 48, 71, 0.99);} // RGBA with 4 params
我的目标是设置一个带有预定义不透明度变量的新rgba(x,y,z,opacity)
,例如0.4(不管先前的不透明度是否存在);但是x,y,z
来自现有值,这些值保证存在。
实施例
from #1: rgb(249,115,0) --> rgba(249,115,0,0.4)
from #2: rgba(14,48,71,0.99) --> rgba(14,48,71,0.4)
任何快速的正则表达式解决方案,除了解析括号内的标记并检查它是3还是4个参数?
当然,我们可以str.replace('rgb(', 'rgba(');
作为第一步,但我只想要一个快速的4-param表达式。
假设我将当前颜色作为字符串,假设var color
是原始str,所以这是一个正则表达式问题。
答案 0 :(得分:3)
var test = [
"rgb(249,115,0)",
"rgba(14,48,71,0.99)",
];
console.log(test.map(function (a) {
return a.replace(/rgba?(\(\s*\d+\s*,\s*\d+\s*,\s*\d+)(?:\s*,.+?)?\)/, 'rgba$1,0.4)');
}));
答案 1 :(得分:1)
我认为这个正则表达式适合您的需求:
rgba?\((\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*)((?:,\s*[0-9.]*\s*)?)\)
请使用替换结果查看此Regex101.com。
答案 2 :(得分:1)
这是我的尝试
rgba?(\(([\d\s]+,?){3})(,[\d\s.]+)?(?=\))
替换为rgba$1,0.4
var tests = ['rgb(249,115,0)','rgba(14,48,71,0.99)'];
var regex = /rgba?(\(([\d\s]+,?){3})(,[\d\s.]+)?(?=\))/;
var replace = 'rgba$1,0.4';
tests.forEach(test => {
console.log(test.replace(regex, replace));
})