防止正常表达吃掉一部分字符串

时间:2012-09-16 15:07:44

标签: javascript regex

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

所以问题是我无法弄清楚如何防止表达式吃组合子。有什么建议?提前谢谢。

1 个答案:

答案 0 :(得分:0)

不要尝试使用正则表达式解析CSS,因为它不是常规语言。有这方面的工具,正则表达式不是一个。 Here's one that I found with a quick search