带有css属性的正则表达式

时间:2012-04-14 15:10:20

标签: javascript css regex

我有css属性及其值的字符串:

str = "filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#cccccc', endColorstr='#000000');
       background: -webkit-linear-gradient(top, black, white);
       animation-duration: 12s;";

我希望我的匹配仅返回属性

properties = text.match(/[^;:]*:/g); 

但它也会返回“progid:”,我该如何避免呢?

3 个答案:

答案 0 :(得分:1)

搜索行的开头或“;”同样(或者可能是换行符/标签取决于你的字符串格式):

/(^|;)[^:;]*:/

你仍然需要稍微清理一下你的结果。

或者,您可以将字符串拆分为“;”首先,然后在“:”上拆分每一位并抓住每个属性的第0个成员:

var str = "filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#cccccc', endColorstr='#000000');background: -webkit-linear-gradient(top, black, white);animation-duration: 12s;";

var rules = str.split(";")

var i, l = rules.length;

var properties = [];

for( i = 0; i < l; i++ ){
    properties.push( rules[ i ].split(":")[0] ); //dangerous if you're not sure you'll always have a result
}

答案 1 :(得分:0)

请尝试

properties = text.match(/^[^;:]*:/g); 

编辑: 如果属性和值之间总是有空格,这是一个更好的解决方案:

properties = text.match(/[^ ;:]+(?=: )/g)

答案 2 :(得分:0)

当你在结束字符串的半结构上拆分时,为了避免空规则,

在半决赛中分裂,内容跟随他们;

var rules= str.split(/;(?=\S+)/);

for(var i= 0, L= rules.length; i<L; i++){
    rules[i]= rules[i].split(':')[0];   
}

/* 
alert(rules)>>(Array)
filter, background, animation-duration
*/