2012-03-12 121 views
0

我试图找到一个正则表达式,它可以让我从CSS文件中提取规则JUST。我不希望任何样式声明,只是规则(选择器)。下面是我的工作示例CSS文件:正则表达式从CSS文件中只提取选择器?

body, p, table, td, th, br, div, span { 
    /* Some styles here */ 
} 

/* This is a test */ 
h1 { 
    /* Some styles here */ 
} 

a:hover { 
    /* Some styles here */ 
} 

-moz-any(input[type="text"], input[type="radio"]) { 
    /* Some styles here */ 
} 

在这个例子中我希望我的正则表达式匹配以下项目:身体,P,表,TD,TH,BR,DIV,跨度,H1 ,a:悬停,-moz-any(输入[type =“text”],输入[type =“radio”])

这是我对正则表达式的尝试。虽然它的工作原理,它包括/ *这是一个测试* /评论,它还包括花括号。理想情况下,这些将被省略。

(}{0,})([^}]*)({) 

任何帮助,这将不胜感激。提前谢谢了!

我还应该注意,我知道这不是一个很棒的CSS文件。这只是一个测试文件,我想出来测试我的解析。

+4

要使用正则表达式做到这一点是复杂的,你最好使用合适解析器。 – Qtax 2012-03-12 13:40:18

+1

四件事:1)规则和选择器*不是同一件事。你只是在寻找选择器。 2)':-moz-any()'是一个伪类,因此它在它之前需要':'。 3)你在用什么语言来实现正则表达式?如果它是一个JavaScript正则表达式,则存在您可以在相关条款中搜索本网站的现有问题。 4)一旦你使用更复杂的样式表,你可能不会用正则表达式得到很多。 – BoltClock 2012-03-12 13:40:28

+0

螺栓 - 我知道我的术语可能不正确。我绝不是CSS专家。我不知道-moz-任何需要的a:在它之前,哎呀。无论哪种方式,重点仍然是我想抓住这一点。另外,我正在C#中实现这一点。 Qtax - 什么会使RegEx做到这一点很复杂?我的RegEx-Foo真的很糟糕:) – 2012-03-12 13:42:26

回答

0

我无法使用RegEx获得解决方案,所以我遵循Qtax的建议并使用了适合CSS3语法的解析器。

我将这个问题标记为答案。

@Qtax - 如果添加您的评论作为一个答案,我会庆祝,作为“正确”的答案:)

+1

您是否定义了CSS3语法?你作为一个合适的解析器选择了什么? – sgtz 2012-09-04 05:43:56

0

这个原始正则表达式会捕获子模式2中的选择器。由于它不是解析器,它也会在注释中捕获选择器。

(\s|^)(.*?)\s*{ 
1

只要你总是对同一线路上宣布开幕squggley支架,因为在你的榜样:

(.+) { 

我可以给你一些代码,演示了如何获得如果你需要它的话。让我知道你正在使用什么语言,我会尽力遵守!