Ruby RegExp-匹配所有CSS选择器和指令

时间:2018-09-25 18:35:24

标签: ruby regex

我正在尝试匹配以下所有CSS选择器和指令,排除任何注释和媒体查询。

a {color: red !important;}

#p1 {
        margin-top: 20px !important
      }

/* Client-specific styles */

      .ExternalClass,  
      .ExternalClass p,  
      .ExternalClass span,  
      .ExternalClass font,  
      .ExternalClass td,  
      .ExternalClass div {
        line-height: 100%;
      }

a {}

@media query {
    a { display:none }  
}

我提出了以下正则表达式:[a-zA-Z#.:*]{1}[^\/*]+?{[\s\S]*?}。这可以正确匹配所有内容,但包括@media query。我尝试使用否定的前瞻例如(?!.+@media.+),但无济于事。

我该怎么做才能仅提取选择器/指令?

示例:https://regex101.com/r/JmjthP/3

解决方案

在@Wiktor Stribiewew的帮助下,可行的解决方案是这样的:

/^(?!.*@media)[\t ]*([a-zA-Z#.:*\[][^{\/]*\s*){[\s\S]*?}/

1 个答案:

答案 0 :(得分:1)

您可以使用

^(?!.*@media) *[a-zA-Z#.:*][^{]*{[\s\S]*?}

请参见regex demo

详细信息

  • ^-字符串的开头
  • (?!.*@media)-除换行符以外的任何0+字符后,不允许@media
  • *-超过0个空格
  • [a-zA-Z#.:*]-字母#.:*
  • [^{]*-除{之外的零个或多个字符
  • {-一个{字符
  • [\s\S]*?-0个以上的字符,尽可能少。
  • }-一个}字符