2010-12-10 10 views
0

最後の1時間は単純な正規表現とグーグルをまとめようとしていましたが、私にとってはうまくいくものを見つけることができません。私は簡単な入力文字列、例えば ".cSSRule {value: 'foo';}"を使って、次のような配列に分割したいと考えています: "[cssRule:value]"実際のルールは値です。私はフル・オン・パーサを探しているわけではありません(それが存在することは分かっていますが)。誰かが親切に私を正しい方向に向けるでしょうか?JavaScriptでRegExを使用してCSS文字列を解析する

var str = ".cssRule { value: 'foo'; }"; 
someArray.push( 
    ((str.replace(/\.|}|;/g,'')) 
     .split(/{/) 
     .join(':"') 
     .replace(/\s/g,'') 
     .replace(/.$/,'"') 
    ); 
    /* =>"[cssRule:"value:'foo'"] */ 

のようなものが働くだろう。この場合おかげで、

のBlu

+0

ないが、どの程度まであなたがプロセスを制御することができます:あなたが最後に検出された以外、同様,;を交換する必要がありますか?実際にCSSスタイルをドキュメントに適用し、実際の計算値を解析するオプションがあるかもしれませんか?あなたのケースでは当てはまらないかもしれませんが、最も簡単な方法です。 –

+0

私はあなたが何を求めているのかよく分かりません。これは実際にはinsertRule/addRuleの単純なラッパー用です。この関数はinsertRuleと同じパラメータをとりますが、addRuleは根本的に異なるので、私は物事を分割する必要があります。なぜマイクロソフトはすべての開発者の人生を生きた地獄にしなければならないのですか? –

答えて

1

これはそれを行う必要があります。

var str = ".cssRule { value: 'foo'; }"; 
var someObject = new Object; 
var matches = str.match(/^\.(.*?){(.*?)}/); 
someObject[matches[1].replace(/ /g,'')] = matches[2].replace(/ /g,''); 

「マッチ」は三つの要素を含む配列になる:最初の(インデックス0)は、に対して一致したものの完全な文字列です。 2番目の(インデックス1)は、ピリオドと中かっこの間のすべてに一致し、3番目の(インデックス2)は中カッコ間のすべてに一致します。

+0

これは私のニーズを満たすように見えます。ただし、1つの修正:someArrayはsomeObjectにする必要があります。 –

+0

さらに複雑なルールや基本ルールを処理するために少し変更を加えなければなりませんでした。「\」を削除しました。 RegExから。あなたのすばらしい助けをもう一度ありがとう! –

+0

ご迷惑をおかけして申し訳ありません(今後のユーザーのために修正しました)...うれしく思います。 –

2

。私はそれが非常に一般的だとは思わない。

+0

ありがとう!それが私の必要を満たしているかどうかわかります。 –

+0

あなたのコードに余分な括弧( "(")があります。 –

+0

あなたのコードは "。"、 ";"、 ":"の文字を取り除いています。 ( "[cssRule:[values]")私はOPでより明確にする必要がありました。これまでの変更されたコードはこれまでのところです: "rule.replace(/}/g、") "))。split(/ {/)。join(":\ "")。replace(/.$/、 "\" ")" –

1

入力文字列はどこから来ていますか?安全なソース(ユーザーからのものではない)の場合は、正規表現を使用して.cSSrule部分とeval()部分を削除します。完全な結合配列が解析され、作成されます。

編集:あなたの質問への答え

input 
    .replace(/^(.*)(?={)/, '') 
    .replace(/;(?!(\s)*?})/g, ',') 
    .replace(';', ''); 
myCss = eval(input); 
+0

はいソースコードは、コードで指定された文字列から来ているので安全です。私はあなたのソリューションとRobのことを見ていきます。皆さんありがとう! –

+0

あなたのコードにはあまり幸運がありませんでした。 IEのJSデバッガは、欠落した ";"というエラーを吐き出していました。 –

関連する問題