在Javascript中,我有一个CSS选择器,我想提取规则:
var cssOriginalString = 'p:hover { color: red; font-weight: bold;}';
var cssFinalString = 'color: red; font-weight: bold;';
我的目标是将所有规则分组到一个数组中:
var rulesArray = ['color: red;', 'font-weight: bold;'];
有什么想法吗?
答案 0 :(得分:1)
您可以尝试使用正则表达式:
[a-z-]+ *:[^:;]+;
[a-z-]+
匹配css属性名称。基于W3schools CSS attributes reference,我很确定它们是小写字母和连字符。但是,如果您有不同的感受(允许大写字母等),您可以修改它。我推荐的最宽松的正则表达式是[\w-]+
,它允许使用字母,数字,下划线和连字符。
*:
是分隔冒号,周围允许有空格。
[^:;]+;
是属性值后跟分号。我已经说过,属性值不能包含冒号:
或分号;
,以防止它跨多个属性匹配。您也可以在此处尝试.*?;
(?
非常重要,以使匹配非贪婪,因此它与多个属性不匹配。)
答案 1 :(得分:1)
你的问题似乎是要求正则表达式,但它很一般。我需要了解更多关于输入字符串的信息(例如,你可以在同一行上有两个规则集吗?你能在多行上有一个规则集吗?是否可能或者关注“}”出现在规则中?怎么样@查询?)。单行上单个规则集的非常简单的表达式:
cssOriginalString.replace(/.*{([^}]+)}/, '$1');