2011-11-03 52 views
-3

我想這樣做在JavaScript中儘可能高效地執行以下操作:取出並提取文本在javascript

  1. 卸下之間串,一切<ul></ul>標籤。
  2. 對於剩下的內容,包含在<li></li>之內的每個字符串都需要轉儲到一個數組中,而不會有任何換行符隱藏在最後。

我在想正則表達式是答案,但我從來沒有用過它們。猜猜我可以找出一個辦法,但最終它可能不是最有效的。

+3

你有什麼迄今所做。 – defau1t

+1

你可以肯定,正則表達式不是答案。在SO上搜索「正則表達式HTML」。 [然後閱讀這個問題/答案](http://stackoverflow.com/questions/7686936/javascript-remove-all-content-between-some-tags)。 –

+1

雖然你*可以*使用RegEx,如果你的HTML格式良好的xml(或XHTML),你可能想試試XSL。這是爲了轉換類似XML的數據而設計的。 – funkymushroom

回答

0

正如其他人所說的,你必須小心使用正則表達式解析HTML。如果HTML被控制並且沒有嵌套的ulli標籤,並且沒有包含有效HTML標籤或<或> chars的嵌入字符串(例如,HTML以已知格式從已知源發出,它可以工作正常)。這裏是做什麼,我想你問了一個辦法:

function parseList(str) { 
    var output = [], matches; 
    var re = /<\s*li[^>]*>(.*?)<\/li>/gi; 
    // remove newlines 
    str = str.replace(/\n|\r/igm, ""); 
    // get text between ul tags 
    matches = str.match(/<\s*ul[^>]*>(.*?)<\/ul\s*>/); 
    if (matches) { 
     str = matches[1]; 
     // get text between each li tag 
     while (matches = re.exec(str)) { 
      output.push(matches[1]); 
     } 
    } 
    return(output); 
} 

更萬無一失用一個實際的HTML解析器能夠理解的格式的細微之處(如嵌套的標籤,標籤值在嵌入式字符串等...),但如果你沒有這些,可以使用這樣一個更簡單的解析器。

你可以看到它在這裏工作:http://jsfiddle.net/jfriend00/c9ZLT/