Javascript匹配“rgb(xx,xx,xx)”和正则表达式regEx?

时间:2012-05-16 06:48:28

标签: javascript regex

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

这是我的代码:

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);

2 个答案:

答案 0 :(得分:2)

我今天正在努力解决这个问题,并且针对这个问题提供了一个稍微简化的解决方案,它使用了一个稍微不同的正则表达式以及JavaScripts的匹配功能(我已经将它包装在一个函数中,以便我们可以重用这个功能根据要求):

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

    return rgbArray;
}

现在只需使用您要检查的值调用该函数。 E.g。

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值,则可以处理这些值。

希望这有助于某人。

答案 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);​