2012-11-15 27 views
-1

很抱歉,如果這個問題被複制PHP matchall喜歡javascript函數時,高管正則表達式

我有一個XML文件,像

<item> 
    <attr1>attr1.1</attr1> 
    <attr2>attr1.2</attr2> 
</item> 
... 
<item> 
    <attr1>attr2.1</attr1> 
    <attr2>attr2.2</attr2> 
</item> 

所有我想要做的就是使用正則表達式來獲得一個數組項目。出於某種原因,我不想在這裏使用jQuery(我已閱讀jQuery.parseXML)。 你可以告訴我如何獲得所有的項目,或者什麼,在Javascript中的功能,就像PHP中的match_all()。 這裏是我的正則表達式,

/<item>([\w\W]+?)<\/item>/ 

謝謝!

+0

附:如果你認爲我的答案沒問題,你可能應該把它移到公認的籌碼上而不是優秀的籌碼上。保持stackoverflow滴答作響! – kieran

回答

0

正如zerkms提到的那樣,已經有在javascript中解析XML的方法,它提供了更大範圍的健壯性和靈活性。還有一個particularly infamous答案試圖解析正則表達式的正則語言的超集,簡而言之,這不是解決這個問題的最好方法。

但是,如果您對這個用例感興趣,不幸的是,沒有像php中的match_all或python中的findall這樣的功能。看看this stackoverflow,尤其是代碼塊

var str = "I learned to play the Ukulele in Lebanon." 
var regex = /le/gi, result, indices = []; 
while ((result = regex.exec(str))) { 
    indices.push(result.index); 
} 

在對以類似的方式找到相同的正則表達式的許多出現一些細節上的第一個答案。

+0

:))謝謝你的回答! – simpletron

0

模擬這種行爲的一種方法是在正則表達式的替換方法中使用回調函數來建立結果。下面是一個例子方便抽象成一個功能...

function match_all(pattern, input){ 
    var result = []; 
    input.replace(pattern, function(_, val){ result.push(val); }) 
    return result; 
} 

...檢查出來有示例XML ...

var sample = "<item>\n\ 
    <attr1>attr1.1</attr1>\n\ 
    <attr2>attr1.2</attr2>\n\ 
</item>\n\ 
...\n\ 
<item>\n\ 
    <attr1>attr2.1</attr1>\n\ 
    <attr2>attr2.2</attr2>\n\ 
</item>" 

console.log(match_all(/<item>([\w\W]+?)<\/item>/gm, sample)) 
// [ 
// "↵ <attr1>attr1.1</attr1>↵ <attr2>attr1.2</attr2>↵", 
// "↵ <attr1>attr2.1</attr1>↵ <attr2>attr2.2</attr2>↵" 
// ] 
相關問題