2012-05-16 92 views
0

如果有人能指出我正确的方向,我将非常感激。我有一个数组“cArr”,在这个数组中我有2个元素。我想要做的是匹配“rgb(xx,xx,xx)”并将其推送到数组“rgbArr”;我遇到的问题是与regEx。与正则表达式regEx匹配的“rgb(xx,xx,xx)”?

这里是我的代码:

var cArr = ["id0{shape:round,rgb(24,23,12)}","id1{shape:long,weight:heavy,rgb(20,20,20)}","id2{shape:elongated,weigth:light,rgb(15,24,8)}"]; 


for(var i=cArr.length -1; i>=0; i--) 
{ 
    if(cArr[i].match(matchColors)) 
    { 
    rgbArr.push(cArr[i]); 
    break; 
    } 
} 

console.log(rgbArr); 
+0

匹配“rgb(24,23,12)”的正则表达式会像“rgb \\(d +,d +,d + \\)”,假设有十进制值。不发布答案,因为我没有得到你的循环,因为你似乎在一个字符串中有多个rgb值,并且正在推动整个字符串...你是否只用puch匹配部分?如果是这样,首场比赛还是所有比赛? –

+0

请澄清你的问题:你为什么休息一下?你想只捕捉最后一个rgb(...)?这个例子中的期望输出是什么? – Gavriel

+0

@EugeneRyabtsev,我想只打相匹配的部分。因此,如果数组有5个元素,并且它们全部具有“rgb(xx,xx,xx)”标记,那么我想将“rgb(xx,xx,xx)”复制到rgbArr。谢谢。 – Combustion007

回答

1

请澄清你的问题(似乎我的评论以上),暂且尝试这样的事情。 (但是,这不会给你的第1个要素的多个RGB颜色...)

var matchColors=/.*?(rgb\([^)]*\)).*/; 

var cArr = ["id0{shape:round,rgb(24,23,12)},id1{shape:long,weight:heavy,rgb(20,20,20)}","id2{shape:elongated,weigth:light,rgb(15,24,8)}","sdf"]; 

var rgbArr=[]; 

for(var i=cArr.length -1; i>=0; i--) { 
    if(cArr[i].match(matchColors)) { 
     var x = cArr[i].replace(matchColors,"$1"); 
     rgbArr.push(x); 
//  break; 
    } 
} 

console.log(rgbArr);​ 
+0

谢谢你帮助我。我想将所有“rgb(xx,xx,xx)”匹配的标签从“cArr”元素复制到“rgbArr”。因此,如果“cArr”数组有5个元素,并且它们全部具有“rgb(xx,xx,xx)”标签,那么我只想将“rgb(xx,xx,xx)”复制到rgbArr。谢谢。 – Combustion007

+0

好的,所以决定:)你原来的问题在第一个元素中有多个rgb(...),我的代码没有处理这个问题。但是现在你已经改变了这个问题。所以如果你知道每个元素最多只有1个rgb(),那么我的代码就可以满足你的要求。 – Gavriel

+0

谢谢。我意识到这是一个错字,我没有注意到,直到你的询问。所以我修好了。这真的有帮助。非常感谢。 – Combustion007

2

我这个问题今天摔跤,并有一个稍微简单的解决这个问题,它采用了稍微不同的常规与JavaScript的“匹配”功能一起表达(我有一个功能包好了,这样的要求,我们可以重复使用此功能):

function parseRGB (string) { 
    var rgbRegex = /(rgb\([^)]*\))/gi; 
    var rgbArray = string.match(rgbRegex); 

    return rgbArray; 
} 

现在只需拨打您要检查值的功能。例如。

parseRGB('-moz-linear-gradient(top, rgb(68, 68, 68), rgb(153, 153, 153))'); 

将返回下面的数组:

[ "rgb(68, 68, 68)", "rgb(153, 153, 153)" ] 

有几件事情需要注意:

  • 如果没有RGB找到匹配这个函数将返回null。
  • JavaScripts匹配字符串函数会自动将所有发生的数据放入数组中。它可以将正则表达式作为参数。
  • 这可以处理多个rgb值,如果它们存在于要检查的字符串中。

希望这可以帮助别人。

相关问题