Javascript 捕获多个RGB值

Javascript 捕获多个RGB值,javascript,regex,Javascript,Regex,我对一个元素应用了一个渐变,我试图使用regexp从背景图像中获取RGB值 #gradient { background: linear-gradient(to right, rgba(255,0,0,1) 0%, rgba(0,0,255,1) 100%); } 使用/rgb\(.*)/不起作用,因为它返回 "rgb(255, 0, 0) 0%, rgb(0, 0, 255) 100%)" "255,0,0", "0,0,255" 我猜那是因为有两个括号。我该如何解决这个问题

我对一个元素应用了一个渐变,我试图使用regexp从背景图像中获取RGB值

#gradient {
    background: linear-gradient(to right,  rgba(255,0,0,1) 0%, rgba(0,0,255,1) 100%);
}

使用
/rgb\(.*)/
不起作用,因为它返回

"rgb(255, 0, 0) 0%, rgb(0, 0, 255) 100%)"
"255,0,0", "0,0,255"
我猜那是因为有两个括号。我该如何解决这个问题?这样它就回来了

"rgb(255, 0, 0) 0%, rgb(0, 0, 255) 100%)"
"255,0,0", "0,0,255"

您的regexp无法工作,因为
*
也匹配
——如果我们将其修改为
[^\)]*
,它将成为您的目标:

var input = "background: linear-gradient(to right,  rgba(255,0,0,1) 0%, rgba(0,0,255,1) 100%);";
var array = input.match(/rgba\([^\)]*\)/gi);

for (var i=0; i<array.length; i++)
    console.log(array[i].match(/\((.*)\)/)[1]);
var input=“背景:线性梯度(向右,rgba(255,0,0,1)0%,rgba(0,0255,1)100%);”;
var array=input.match(/rgba\([^\)]*\)/gi);

对于(var i=0;i

正则表达式很难。应该避免使用具有多个捕获组的复杂正则表达式,除非它们显然是解析某些内容的最实用的方法

在这种情况下,我不清楚它们是什么。我会:

rgb(255, 0, 0) 0%, rgb(0, 0, 255) 100%)
1-从表达式中删除括号

string = string.replace(/[()]/g, '');
// "rgb255, 0, 0 0%, rgb0, 0, 255 100%"
2-在rgb上拆分:

parts = string.split('rgb');
// ["", "255, 0, 0 0%, ", "0, 0, 255 100%"]
3-第一个元素将始终为空,因此请删除该元素:

parts.shift()
// ["255, 0, 0 0%, ", "0, 0, 255 100%"]
4-将每个元素拆分为
/,?/
(可选逗号,然后是空格):


这里有您的值,我们只需要两个简单的正则表达式。

我想使用一个regexp来避免使用多行代码来完成任务,但似乎我想用一个regexp做的事情是不可能的

我开始明白,如果使用
g
标志,就不能捕获(但要匹配)

我已经用一个班轮解决了这个问题

elementColor.match(/\(\d+, \d+, \d+\)/g)[0].replace(/[( )]/g, "");

// "linear-gradient(to right, rgb(255, 0, 0) 0%, rgb(0, 0, 255) 100%)" -> "(255, 0, 0)" -> "255,0,0"

不确定您的实际代码是否也是如此,但在粘贴到此处的代码中,您指的是Javascript中的
.backgroundImage
,尽管您刚刚在CSS中定义了
background
。此外,您的正则表达式匹配“rgb”,而CSS代码使用“rgba”,这当然需要一个不同的模式。@Oscar css是不相关的。我已经检查了返回的字符串。它是
“线性梯度(向右,rgb(255,0,0)0%,rgb(0,0,255)100%)”