2013-02-05 44 views
6

我想从CSS边框属性拆分成其组成部分,即:正则表达式分裂CSS border属性到其部分

.someClass{ 
    border: 1px solid black; 
} 

进入

border-width: 1px 
border-style: solid; 
border-color: black; 

我已经分裂出去的边界,和所以我只需要解析属性的值部分

现在在CSS中,您可以将以上3个属性的任意组合存在,所以

border: 1px solid; 
border: solid Gold; 
border: 1em; 
border: 1mm #000000; 
border: 1px inset rgb(12, 44, 199); 

所有的都是合法的,所以我需要说明这一点。

我有什么到目前为止

([0-9]+[a-zA-Z|%]+)* *([a-zA-Z]*) *(.*) 

哪个为实放入第三个捕获组,不出二日的“1px的固体”情况下正常的情况下工作正常,但失败。我不是正则表达式专家,所以我可能犯了非常基本的错误,但任何帮助将不胜感激。我正在使用C#(但主要是在http://gskinner.com/RegExr/中进行测试,所以任何区别可能都是问题)

回答

1

在表达式的开头部分,仅包含border:似乎是一个主要帮助,因为它不会意外地匹配第二个或第三组。同样,在表达式的末尾添加;可以防止第二组或第三组捕获太早。除此之外,将第二组从*更改为+也有帮助,因为它可以按照预期而不是第三组来匹配第二组。总之,试试这个:

border: ([0-9]+[a-zA-Z|%]+)* *([a-zA-Z]+)* *(.*)*; 

我怀疑这是完美的,如果你需要的结果的工作100%,你可能不应该使用一个正则表达式,而是标记化和解析字符串(我很怀疑CSS规则完全用正则表达式解析),但如果这适用于有限的规则,那么你就需要它。

+0

谢谢,这似乎对我来说很好,并为我获得足够准确的结果。 – Nymain