2012-09-16 47 views
-1

一些背景信息:我正在編寫一個程序,它允許使用CSS選擇器分析文檔的DOM樹。我無法使用querySelectorAll,因爲我需要支持舊瀏覽器,即使在最新的瀏覽器中,它也往往會出現問題,並且功能不夠強大。這意味着我必須編寫自己的CSS選擇器引擎/解析器。阻止正則表達式進食部分字符串

我有以下正則表達式。

var expression = /([^(>\+~)\\\(\)|^(>\+~)\\\[\]]+|\([^\)]+\)|\[[^\]]+\]|\\\.)+/g; 

它用於按照以下格式將選擇器分爲多個部分:[ancestor,combinator,descendant]。用法示例:

var selector = 'div[class]>a~p'; 
var parts = selector.match(expression); 

不幸的是,輸出我得到的是這樣的:

// parts: ['div[class]', 'a', 'p']; 

我想輸出是這樣的:

// parts: ['div[class]', '>', 'a', '~', 'p']; 

所以問題是,我可以不知道如何防止表情吃聯合者。有什麼建議?先謝謝你。

+0

我必須承認,儘管我認爲自己對正則表達式很流利,但對於你的正則表達式可能如何工作,我還沒有最模糊的想法。最值得注意的是我認爲你並不知道字符類是如何工作的:'[^(> \ +〜)\\\(\)| ^(> \ +〜)\\\ [\]]'例如匹配*一個*不屬於集合的字符'()[]> +〜\ |'... –

+0

我必須承認,在正則表達式方面,我不是專家。我現在擁有的表達式實際上是我用於完全不同的表達式的一個修改版本,但由於它幾乎可以工作,我希望只需稍作更改就可以實現。 – undefined

+0

原始表達式與我現在使用的表達式幾乎完全相同。開始被用來匹配沒有在正方形內呈現的逗號。在這種情況下,情況幾乎相同,excpet逗號替換爲那些組合器。在方塊內部,這些組合器在CSS中的含義會非常不同。 – undefined

回答

相關問題