我有一个用C#编写的CSS解析器实用程序。我能够使用以下正则表达式解析和提取所有CSS类。这是按预期工作的。
[C#]
const string expression = "(.*?)\\{(.*?)\\}";
var regEx = new Regex(expression, RegexOptions.Singleline | RegexOptions.IgnoreCase);
var matches = regEx.Matches(styleSheet);
[CSS]
body
{
font-family: Helvetica Neue,Helvetica,Arial,sans-serif;
font-size: 13px;
color: #666666;
}
img
{
border: 0;
display: block;
}
@media only screen and (max-width: 600px)
{
table[class=bodyTable]
{
width: 100% !important;
}
table[class=headerlinks]
{
display:none !important;
}
}
a
{
text-decoration: none;
}
但是现在我们的软件已开始支持媒体查询,出于某种原因,我们希望在CSS解析期间忽略整个媒体查询。所以它应该只匹配body,img和a。
感谢有人可以帮我写新的正则表达式:)
[解决方法] 一旦我得到所有匹配项,在我的代码中我必须使用foreach进行一些处理 -
foreach(Match match in matches)
{
var selectorString = match.Groups[1].ToString();
if (selectorString.IndexOf("@media", StringComparison.InvariantCulture) > -1)
continue;
// processing...
}
答案 0 :(得分:0)
通过使用负面观察,我们获得了更优雅的解决方案。我写了一些表格:
((?:(?<!@media).)*?){(.*?)}
或者,扩展:
( // start 1st group
(?: // start non-capturing group (complex expression)
(?<!@media) // match if not preceded by @media
. // now match any character
)*? // any number of times
) // end of 1st group
{ // match literal {
( // start 2nd group
. // any character
*? // any number of times
) // end of 2nd group
} // match literal }
查看https://www.debuggex.com/r/QgjgoymphZ1Ska25。
注意:随意根据需要添加转义...