【问题标题】:RegEx to extract only selectors from CSS file?正则表达式仅从 CSS 文件中提取选择器?
【发布时间】: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


【解决方案1】:

只要您始终将左方括号与您的声明放在同一行,如您的示例所示:

(.+) {

如果你需要,我可以给你一些代码来展示如何获取组。让我知道您使用的是什么语言,我会尽力遵守!

【讨论】:

    【解决方案2】:

    这个粗略的正则表达式将捕获子模式 2 中的选择器。由于它不是解析器,但它也会捕获 cmets 中的选择器。

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

    【讨论】:

      【解决方案3】:

      我无法使用 RegEx 获得解决方案,因此我遵循 Qtax 的建议并使用具有 CSS3 语法的适当解析器。

      我将此问题标记为答案。

      @Qtax - 如果您将评论添加为答案,我会将其标记为“正确”答案:)

      【讨论】:

      • 你定义了 CSS3 语法吗?作为合适的解析器,您选择了什么?
      猜你喜欢
      • 2012-10-09
      • 2018-05-09
      • 1970-01-01
      • 2019-11-14
      • 2011-10-29
      • 2012-06-25
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多