Сопоставление селекторов CSS с Javascript RegExp - PullRequest
2 голосов
/ 30 марта 2011

В основном мне нужно сопоставить шаблон с любым селектором CSS в файле CSS.В идеале это должно быть в состоянии захватить все эти правила (и любое другое правило, которое кто-то может составить в файле CSS).Это для парсера javascript, если это вообще помогает.

#div div .child {

}

.somediv, #someotherdiv {

}

body:hover {

}

Лучшее, что я смог придумать, это что-то вроде:

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

Но этопросто заканчивает тем, что выбирает больше, чем нужно ... Как один селектор, все его правила, и вплоть до открытия следующего селектора "{".Пытался часами с этим.Заранее спасибо!

Ответы [ 4 ]

3 голосов
/ 30 марта 2011

Если вас беспокоят сами селекторы, это должно немного приблизить вас.Я думаю, что это соответствует одиночным пробелам, поэтому можно использовать немного больше настроек ...

var css = ...some css string...
var found = css.replace(/{([^}]*)}/gm,"{}").match(/([#|\.]?)([\w|:|\s|\.]+)/gmi);
1 голос
/ 30 марта 2011

Я бы поменял его на ленивую звезду и попробовал бы снова:

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

Таким образом, это не будет жадным.

0 голосов
/ 17 января 2013

Вы пытались заменить. * На отрицательный класс символов?

/(#|\.|[a-zA-Z])([^{]*) {/g
0 голосов
/ 30 марта 2011

Для того, чтобы выполнить сопоставление скобок, вам нужен язык, более наглядный, чем тот, который предоставляет обычный старый регулярный оператор. http://www.regular -expressions.info / named.html содержит несколько примеров того, что придумали разные языки программирования для решения проблемы «именованной группы».

Вам понадобится парсер, а не просто регулярное выражение для того, что вы делаете.

...