基本上我需要模式匹配CSS文件中的任何和所有CSS选择器。理想情况下,它应该能够获取所有这些规则(以及任何其他可以在CSS文件中组成的规则)。这是一个javascript CSS解析器,如果这有帮助的话。
#div div .child {
}
.somediv, #someotherdiv {
}
body:hover {
}
迄今为止我能想出的最好的东西是:
/(#|\.|[a-zA-Z])(.*) {/g
但这只是最终选择了比它需要的更多......就像一个选择器,它的所有规则,以及直到下一个选择器的开头“{”。用这个试了几个小时。提前谢谢!
答案 0 :(得分:3)
如果你只关心选择器本身,这应该会让你更接近。我认为它匹配单个空格,所以可以稍微调整一下......
var css = ...some css string...
var found = css.replace(/{([^}]*)}/gm,"{}").match(/([#|\.]?)([\w|:|\s|\.]+)/gmi);
答案 1 :(得分:1)
我会把它变成一个懒惰的明星再试一次:
/(#|\.|[a-zA-Z])(.*?) {/g
这样就不会贪心。
答案 2 :(得分:0)
为了进行大括号匹配,你需要一种比普通的旧正则表达式更具描述性的语言。 http://www.regular-expressions.info/named.html提供了一些关于处理“命名组”问题的不同编程语言的例子。
你需要一个解析器,而不仅仅是你正在做的正则表达式。
答案 3 :(得分:0)
您是否尝试使用否定字符类替换。*
/(#|\.|[a-zA-Z])([^{]*) {/g