Javascript 捕获多个RGB值
我对一个元素应用了一个渐变,我试图使用regexp从背景图像中获取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" 我猜那是因为有两个括号。我该如何解决这个问题
#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%)”