-1

一些背景信息: 我正在编写一个程序,它允许使用 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'];

所以问题是我不知道如何防止表达式吃掉组合子。有什么建议吗?先感谢您。

4

1 回答 1

0

不要尝试用正则表达式解析 CSS,它不是正则语言。有这方面的工具,而正则表达式不是一个。这是我通过快速搜索找到的

于 2012-09-16T15:12:19.893 回答