【发布时间】:2012-04-03 19:51:04
【问题描述】:
我正在尝试找到一个正则表达式,它可以让我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 */
}
在这个例子中,我希望我的正则表达式匹配以下项目:body、p、table、td、th、br、div、span、h1、a:hover、-moz-any(input[type="文本"], 输入[type="radio"])
这是我对正则表达式的尝试。虽然它可以工作,但它包括 /* This is a test */ 注释,它还包括花括号。理想情况下,这些将被省略。
(}{0,})([^}]*)({)
对此的任何帮助将不胜感激。非常感谢!
我还应该注意,我知道这不是一个很好的 CSS 文件。这只是我想出的一个测试文件,用于测试我的解析。
【问题讨论】:
-
用正则表达式来做这件事很复杂,你最好使用合适的解析器。
-
四件事:1) 规则和选择器不是一回事。您正在寻找的只是选择器。 2)
:-moz-any()是一个伪类,因此它需要:在它之前。 3)你用什么语言实现正则表达式?如果它是 JavaScript 正则表达式,您可以使用相关术语在本网站搜索现有问题。 4) 一旦您使用更复杂的样式表,您可能不会在正则表达式方面走得太远。 -
Bolt - 我知道我的术语可能不正确。我绝不是 CSS 专家。我不知道 -moz-any 需要一个 : 在它之前,哎呀。无论哪种方式,重点仍然是我想抓住它。另外,我正在用 C# 实现它。 Qtax - 是什么让 RegEx 变得复杂?我的 RegEx-Foo 真的很糟糕 :)
-
我已经添加了适当的标签。有许多复杂的因素,但@规则,可能嵌套也可能不嵌套,是通常的嫌疑人(例如媒体查询)。
-
您需要解析所有 CSS 语言结构才能正确处理,如 cmets、引号等。这就是使用正则表达式为 CSS 制作完整的解析器。它可以用一个复杂的表达式(以及一些代码)来完成,但这就是解析器的用途。我确信 CSS 有 C# 解析器,所以没有必要重新发明轮子,除非这只是一个练习。
标签: c# css regex css-selectors