0

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:」も返します。どうすれば回避できますか?

4

3 に答える 3

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
}
于 2012-04-14T15:28:31.383 に答える
0

してみてください

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

編集:プロパティと値の間に常にスペースがある場合、これはより良い解決策です:

properties = text.match(/[^ ;:]+(?=: )/g)
于 2012-04-14T15:20:29.357 に答える
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
*/
于 2012-04-14T16:21:01.117 に答える