捕获多个RGB值
Capture multiple RGB values
本文关键字:RGB 更新时间:2023-09-26
我有一个渐变应用到一个元素,我试图使用regexp从背景图像中获得RGB值。
#gradient {
background: linear-gradient(to right, rgba(255,0,0,1) 0%, rgba(0,0,255,1) 100%);
}
var elm = document.getElementById("gradient");
var elementColor = getComputedStyle(elm).backgroundImage;
// elementColor = "linear-gradient(to right, rgb(255, 0, 0) 0%, rgb(0, 0, 255) 100%)";
var first = elementColor.match(/rgb'((.*)')/)[0];
var second = elementColor.match(/rgb'((.*)')/)[1];
使用/rgb'((.*)')/
不起作用,因为它返回
"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]);
http://jsfiddle.net/4z8Ly/2/正则表达式很难。应该避免使用包含多个捕获组的复杂正则表达式,除非它们显然是解析某些内容的最实用的方法。
在这种情况下,我不清楚他们是。我想:
rgb(255, 0, 0) 0%, rgb(0, 0, 255) 100%)
1-去掉表达式
中的圆括号string = string.replace(/[()]/g, '');
// "rgb255, 0, 0 0%, rgb0, 0, 255 100%"
2- Split on 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-用/,? /
分隔每个元素(可选的逗号,然后是空格):
parts[0].split(/,? /g)
// ["255", "0", "0", "0%", ""]
你有你的值,我们只需要两个非常简单的正则表达式。
我想使用单个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"
相关文章:
- 没有找到相关文章