2014-01-09 17 views
1

我有一些CSS,我正在創建一個所有類名和標識符的列表。這是我有:正則表達式來提取CSS類名和ID

var TheList = new List<string>(); 
var Test2 = Regex.Matches(TheCSS, ".-?[_a-zA-Z]+[_a-zA-Z0-9-]*(?=[^}]*\\{)"); 

foreach(Match m in Test2) 
{ 
    TheList.Add(m.Value); 
} 

的問題是,有一些不需要的元素:

body 
:hover 
select 
input 
label 
[for 
input 
[type 
'radio 

我已經與我在網上發現了幾個正則表達式的嘗試;這個是最接近的,但還不完美。基本上,它需要包括僅與#.開始以免body[type元素,然後不包括僞選擇像:hover

我需要什麼,在正則表達式來改變,使其工作?

謝謝。

+0

用你的測試用例在http://gskinner.com/RegExr/上準備一個樣本。 –

+0

@NielsKeurentjes:這裏你去:http://regexr.com?37uc4 – frenchie

回答

4

正在關注the CSS standards,類別或ID必須匹配[_A-Za-z0-9\-]+。類或ID因此與直接由#.前綴的字符串相匹配。

在確定您需要做的所有事情之後,確保在出現}之前確保其後面跟着{,以確保您不在規則之外。然後

將所得的regexp將是:([\.#][_A-Za-z0-9\-]+)[^}]*{

Your sample case。相同的正則表達式適用於Facebook CSS

+0

好吧,這看起來不錯。我將它改爲([\\。#] [_A-Za-z0-9 \\ - ] +)[^}] [* {]以確保包含*作爲結束的可能性。 – frenchie