我正在尝试匹配以下所有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]*?}/
答案 0 :(得分:1)
您可以使用
^(?!.*@media) *[a-zA-Z#.:*][^{]*{[\s\S]*?}
请参见regex demo
详细信息
^
-字符串的开头(?!.*@media)
-除换行符以外的任何0+字符后,不允许@media
*
-超过0个空格[a-zA-Z#.:*]
-字母#
,.
,:
或*
[^{]*
-除{
之外的零个或多个字符{
-一个{
字符[\s\S]*?
-0个以上的字符,尽可能少。}
-一个}
字符