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

我正在尝试匹配下面的所有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 } } 

我想出了以下RegEx: [a-zA-Z#.:*]{1}[^\/*]+?{[\s\S]*?} 。 这正确地匹配所有内容,但包括@media query 。 我尝试使用负面(?!.+@media.+) ,例如(?!.+@media.+)但这没有用。

如何仅提取选择器/指令,我该怎么办?

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

在@WiktorStribiżew的帮助下,工作解决方案如下:

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

你可以用

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

请参阅正则表达式演示

细节

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