Регулярное выражение для действительного селектора css и / или jQuery

Мне нужно что-то вроде этого:

Regex validSelector = new Regex("^[.#a-zA-Z0-9_:[] ]+[,><a-zA-Z0-9_~=\"\":[] ]*$");

Кто-нибудь написал регулярное выражение для проверки селекторов jQuery или CSS? (CSS3 / jQuery1.4)

Или кто-нибудь знает, где я могу найти регулярное выражение или генератор регулярных выражений для проверки селектора jQuery? (Или, по крайней мере, селекторов CSS?)

Я пробовал просмотреть код sizzle.js bu John Resig и w3c docs для css (http: // www.w3.org/Style/CSS/), но в итоге заболела голова :(

Подумал, что лучше спросить, написал ли кто-нибудь из вас или использовал для этого какой-нибудь фрагмент.

Спасибо!!


person Robin Maben    schedule 16.11.2010    source источник
comment
Технически я не думаю, что есть недопустимые селекторы, просто некоторые, которые ничего не выбирают. В любом случае, такие задачи, как сопоставление скобок и обработка различных контекстов (нормальный, внутри квадратных скобок, внутри кавычек), очень недружелюбны к регулярным выражениям и обычно выполняются с помощью какого-либо синтаксического анализатора.   -  person Tgr    schedule 16.11.2010
comment
@Jonathan: Судя по его фрагменту кода, я предполагаю, что он хочет сделать это на C #.   -  person T.J. Crowder    schedule 16.11.2010
comment
@ T.J. фрагмент выглядит несколько общим, но да, вы, вероятно, правы   -  person Jonathan Day    schedule 16.11.2010
comment
@Jonathan: Ну, это плюс тег. ;-)   -  person T.J. Crowder    schedule 16.11.2010
comment
@Tgr - Но есть недопустимые имена классов (например, начинаются с числа), поэтому, по расширению, селектор, который соответствует недопустимому имени класса, может считаться недопустимым? Ссылка stackoverflow.com/questions/448981/   -  person Jonathan Day    schedule 16.11.2010
comment
Вы можете создать регулярное выражение прямо из грамматики селекторов.   -  person Gumbo    schedule 16.11.2010
comment
@TJ, Джонатан: Я включил тег c #, предполагая, что кто-то где-то может уже иметь это в своей вспомогательной библиотеке или что-то в этом роде ... Или, по крайней мере, знать о чем-то важном.   -  person Robin Maben    schedule 16.11.2010
comment
@Jonathan Day: извините, я не понял, я говорил о селекторах jQuery, а не о CSS. .123 - это селектор jQuery, который выбирает (недопустимый) класс 123 (попробуйте его в своем браузере, он действительно работает). Вопрос о том, делает ли это селектор jQuery недействительным, остается только спорить. Кроме того, язык селекторов jQuery очень открыт, вы можете легко добавлять свои собственные операторы или даже изменять значение ..   -  person Tgr    schedule 18.11.2010


Ответы (2)


В Спецификации селекторов CSS 3 есть раздел о грамматика селекторов, которую можно использовать для построения регулярного выражения. Просто начните с селектора и заменяйте каждую переменную ее производной, пока не останется никаких переменных.

person Gumbo    schedule 16.11.2010

Регулярные выражения не являются хорошими синтаксическими анализаторами. (Они могут составлять отличные части синтаксического анализатора.) Если вам действительно нужно это сделать, вам, вероятно, действительно придется использовать синтаксический анализатор. Здесь могут помочь ответы на этот вопрос здесь в StackOverflow.

person T.J. Crowder    schedule 16.11.2010
comment
Этот другой вопрос не отображался в моих поисковых запросах, спасибо! - person Robin Maben; 16.11.2010