2011-03-30 70 views
1

基本上我需要模式匹配CSS文件中的任何和所有CSS选择器。理想情况下,它应该能够获取所有这些规则(以及其他任何可以在CSS文件中构建的规则)。这是一个JavaScript CSS解析器,如果有帮助的话。使用Javascript RegExp匹配CSS选择器

#div div .child { 

} 

.somediv, #someotherdiv { 

} 

body:hover { 

} 

最好的我已经能够拿出这么远是这样的:

/(#|\.|[a-zA-Z])(.*) {/g 

但这只是最终选择比它需要...喜欢一个选择更多,所有这些都是规则,直到下一个选择器的开始“{”。一直尝试了几个小时。提前致谢!

回答

2

如果你只是关心选择器本身,这应该让你更接近一点。我认为这是匹配单个空格,所以可以使用一些更多的调整尚未...

var css = ...some css string... 
var found = css.replace(/{([^}]*)}/gm,"{}").match(/([#|\.]?)([\w|:|\s|\.]+)/gmi); 
+0

这工作得非常好。我所要添加的只是一个快速的“{”最后它正在工作。谢谢你,伙计。 – 2011-03-30 05:14:47

0

为了进行大括号匹配,您需要一种比普通的旧正则表达式更具描述性的语言。 http://www.regular-expressions.info/named.html举例说明了不同的编程语言提出来处理“命名组”问题。

你需要一个解析器,而不仅仅是正则表达式。

1

我会把它变成一个懒惰的明星,然后再试一次:

/(#|\.|[a-zA-Z])(.*?) {/g 

这样,它赢得了”不要贪心。

+0

这不是我需要的正则表达式,但你的懒星帮助了我必须做出的另一个正则表达式。所以为你+1先生! – 2011-03-30 05:14:00

0

您是否尝试使用否定字符类替换*。

/(#|\.|[a-zA-Z])([^{]*) {/g