2011-03-30 71 views
1

基本上我需要模式匹配CSS文件中的任何和所有CSS選擇器。理想情況下,它應該能夠獲取所有這些規則(以及其他任何可以在CSS文件中構建的規則)。這是一個JavaScript CSS解析器,如果有幫助的話。使用Javascript RegExp匹配CSS選擇器

#div div .child { 

} 

.somediv, #someotherdiv { 

} 

body:hover { 

} 

最好的我已經能夠拿出這麼遠是這樣的:

/(#|\.|[a-zA-Z])(.*) {/g 

但這只是最終選擇比它需要...喜歡一個選擇更多,所有這些都是規則,直到下一個選擇器的開始「{」。一直嘗試了幾個小時。提前致謝!

回答

2

如果你只是關心選擇器本身,這應該讓你更接近一點。我認爲這是匹配單個空格,所以可以使用一些更多的調整尚未...

var css = ...some css string... 
var found = css.replace(/{([^}]*)}/gm,"{}").match(/([#|\.]?)([\w|:|\s|\.]+)/gmi); 
+0

這工作得非常好。我所要添加的只是一個快速的「{」最後它正在工作。謝謝你,夥計。 – 2011-03-30 05:14:47

0

爲了進行大括號匹配,您需要一種比普通的舊正則表達式更具描述性的語言。 http://www.regular-expressions.info/named.html舉例說明了不同的編程語言提出來處理「命名組」問題。

你需要一個解析器,而不僅僅是正則表達式。

1

我會把它變成一個懶惰的明星,然後再試一次:

/(#|\.|[a-zA-Z])(.*?) {/g 

這樣,它贏得了」不要貪心。

+0

這不是我需要的正則表達式,但你的懶星幫助了我必須做出的另一個正則表達式。所以爲你+1先生! – 2011-03-30 05:14:00

0

您是否嘗試使用否定字符類替換*。

/(#|\.|[a-zA-Z])([^{]*) {/g