从各种rgb / rgba字符串快速正则表达式/替换rgba(..)

时间:2017-10-24 15:31:49

标签: javascript jquery regex

我有各种颜色定义,如下所示,

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,所以这是一个正则表达式问题。

3 个答案:

答案 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));
})