【发布时间】:2009-04-17 21:12:25
【问题描述】:
我正在开发一种工具来解析文件以获取 CSS 样式声明。它使用了一个非常复杂的正则表达式,除了预期的性能问题和一些暂时不影响我的小错误之外,它正在做我想做的所有事情,除了一件事。
我让它匹配元素名称、类、子类、伪类等的所有组合。但是,当一行包含多个声明时,我只能让它匹配一次。举个例子,目前让我感到不安的事情是这样的:
td.class1, td.class2, td.class3
{
background-color: #FAFAFA;
height: 10px;
}
我可以编写一个满足所有三个声明的表达式,但由于我还在它后面捕获信息(括号内的实际样式信息),我觉得这整个文本块都被考虑在内因此,引擎会继续处理刚刚处理的整个块之后的下一个字符。
有没有办法做到这一点,每个类都将是一个单独的匹配项,并且所有类都将包含以下样式信息?我知道我可以修改我的正则表达式以匹配整行,然后在我得到匹配后将其解析为逗号,但如果可能的话,我想将我的所有逻辑保留在表达式本身中。
如果表达式和/或我用来生成它的注释代码与答案绝对相关,我可以发布它,但表达式很大/丑陋(就像所有重要的正则表达式一样)并且代码有点冗长.
【问题讨论】: