从JavaScript中的CSS颜色模式字符串更改多个实体的alpha通道值

从JavaScript中的CSS颜色模式字符串更改多个实体的alpha通道值,javascript,regex,Javascript,Regex,假设我们有一个表示CSS颜色模式的常数: const COLOR = 'rgba(100,100,200, 0) rgb(100, 100, 200) rgba(100,200,250) rgba(100,200,250,0.8) rgba(40, 50, 60, 1)'; JavaScript中向每个rgba(…)的alpha通道添加0.1的最快方法是什么(match/regexp…?),如果是rgb(…),则使用alpha通道(即:0.1)将其更改为rgba(…)?如果rgba(…)的al

假设我们有一个表示CSS颜色模式的常数:

const COLOR = 'rgba(100,100,200, 0) rgb(100, 100, 200) rgba(100,200,250) rgba(100,200,250,0.8) rgba(40, 50, 60, 1)';
JavaScript中向每个rgba(…)的alpha通道添加0.1的最快方法是什么(match/regexp…?),如果是rgb(…),则使用alpha通道(即:0.1)将其更改为rgba(…)?如果rgba(…)的alpha通道已为1,则应保持为1,即使较高的值不会破坏计算样式

因此,生成的字符串将是:

rgba(100,100,200, 0.1) rgba(100, 100, 200, 0.1) rgba(100,200,250,0.1) rgba(100,200,250,0.9) rgba(40, 50, 60, 1)

第一步是将rgb替换为rgba,然后将0.1添加到最后一个小于1的数字,最后替换只有三个值到四个值的实例(这个正则表达式看起来很奇怪,因为一些括号中的数字有空格,而另一些没有空格)

COLOR.replace(/rgb\(/g,'rgba(').replace(/(\d\.\d[^\d]0)\)/g,(match,p1)=>{返回字符串(数字(p1)+0.1)+');}.replace(/(*\d+*,*\d+*,*\d+*)(\)/g,$1,0.1$2')


重要的是要注意,只有当第三个值始终大于1时,这才起作用。

为什么结尾不是rgba(40,50,60,1.1)?alpha通道必须介于[0,1]之间。超过1的任何内容都将被浏览器作为1处理。即使不会影响最终结果,也要保持这种逻辑。是的,我故意添加/删除空格以涵盖这些情况。我不认为我能自己想出那个regexp。谢谢你的解决方案。任何时候“大鼠”,请考虑我将来的正则表达式问题。