我有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:”,我该如何避免呢?
答案 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
*/