将字符串中 0.9 alpha 处的 RGB 转换为 RGBA

Convert RGB to RGBA at 0.9 alpha in string

我需要采用颜色渐变并将 rgb 动态更改为 rgba 并添加 0.9 alpha 或其他一些数字。当然 div id="gradient" 可以有 rgb 和 rgba 三种以上的颜色。我尝试替换 ((')', ', 0.9)')。替换 ('rgb', 'rgba');但它不起作用。我该怎么做?

结果应如下所示:

线性渐变(90deg, rgba(205, 55, 55, 0.7) 11%, rgba(80, 55, 205, 0.9) 45%, rgba(55, 205, 73, 0.5) 79%)

function myFunction() {
  var gradient = document.getElementById("gradient").style.background;
  document.getElementById("demo").innerHTML = gradient.replace(')', ', 0.9)').replace('rgb', 'rgba');
}
<div id="gradient" style="background: linear-gradient(
90deg
, rgba(215, 45, 45, 0.7) 11%, rgb(73, 45, 215) 45%, rgba(45, 215, 65, 0.5) 79%);"></div>

<button onclick="myFunction()">Click me</button>

<p id="demo"></p>

要直接在样式中替换,可以使用下面的代码。但是,如果可能,您应该在 css 文件中使用不同的样式,然后只需在单击时切换整个元素样式(例如 gradient-idlegradient-clicked 或任何您需要的样式)。

function myFunction() {
    var gradient = document.getElementById("gradient")
        .style
        .background
        .replace(/rgb\([0-9]{1,3},\s[0-9]{1,3},\s[0-9]{1,3}/, "$&, 0.75") // put another alpha here instead of 0.75
        .replace("rgb(", "rgba("); // then replace rgb( with rgba(

    document.getElementById("demo").innerHTML = gradient;
    document.getElementById("demo").style.background = gradient;
}
<div id="gradient" style="
    background: linear-gradient(90deg,
    rgba(205, 55, 55, 0.7) 11%,
    rgb(80, 55, 205) 45%,
    rgba(55, 205, 73, 0.5) 79%);"></div>

<button onclick="myFunction()">Click me</button>
<p id="demo"></p>

也可以是:

// a regular expression with named capturing group "rgb" that captures the RGB values: "rgb(1, 20, 140)" -> "1, 20, 140"
const r = /rgb\((?<rgb>\d+\s*,\s*\d+\s*,\s*\d+)\)/;

let style = 'linear-gradient(90deg, rgb(205, 55, 55) 11%, rgb(80, 55, 205) 45%, rgb(55, 205, 73) 79%)';

// now we can change the values 1 by 1

style = style.replace(r, "rgba(, 0.7)");
// linear-gradient(90deg, rgba(205, 55, 55, 0.7) 11%, rgb(80, 55, 205) 45%, rgb(55, 205, 73) 79%)

style = style.replace(r, "rgba(, 0.9)");
// linear-gradient(90deg, rgba(205, 55, 55, 0.7) 11%, rgba(80, 55, 205, 0.9) 45%, rgb(55, 205, 73) 79%)

style = style.replace(r, "rgba(, 0.5)");
// linear-gradient(90deg, rgba(205, 55, 55, 0.7) 11%, rgba(80, 55, 205, 0.9) 45%, rgba(55, 205, 73, 0.5) 79%)

console.log(style);

// linear-gradient(90deg, rgba(205, 55, 55, 0.7) 11%, rgba(80, 55, 205, 0.9) 45%, rgba(55, 205, 73, 0.5) 79%)