一些背景信息:我正在编写一个程序,它允许用CSS分析器分析文档的DOM树。我不能使用querySelectorAll,因为我需要支持旧的浏览器,即使在最新的浏览器中它也往往是错误的并且它不够强大。这意味着我必须编写自己的CSS选择器引擎/解析器。
我有以下正则表达式。
var expression = /([^(>\+~)\\\(\)|^(>\+~)\\\[\]]+|\([^\)]+\)|\[[^\]]+\]|\\\.)+/g;
它曾用以下格式将选择器划分为多个部分:[祖先,组合子,后代]。用法示例:
var selector = 'div[class]>a~p';
var parts = selector.match(expression);
不幸的是,我得到的输出是:
// parts: ['div[class]', 'a', 'p'];
我希望输出如下:
// parts: ['div[class]', '>', 'a', '~', 'p'];
所以问题是我无法弄清楚如何防止表达式吃组合子。有什么建议?提前谢谢。
答案 0 :(得分:0)
不要尝试使用正则表达式解析CSS,因为它不是常规语言。有这方面的工具,正则表达式不是一个。 Here's one that I found with a quick search