2014-01-09 15 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