2012-04-02 54 views
0

我有這一塊的HTML代碼:JavaScript的正則表達式需要

<tr class="AttCardFooter" onMouseOver="this.style.backgroundColor='#E1EAFE'" onMouseOut="this.style.backgroundColor='Transparent'">...etc etc.. new lines etc.. <td title="Saldo+">33:33</td><td title="Saldo-">22:22</td> .. etc etc... 

我需要的JavaScript正則表達式,將抓住這兩個領域33:33和22:22 所有這一切我都試過因爲新行字符失敗。 如果有人知道如何做到這一點,我將非常感激。

+0

使用正則表達式來解析HTML通常被認爲是一個壞主意。我建議你使用類似xpath的東西來代替。 https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript – 2012-04-02 19:06:12

+0

需要對有多少JavaScript正則表達式問題關於解析HTML進行計數。 – maerics 2012-04-02 19:18:11

回答

2

Don't use a regexp。我猜你的一段html是某個元素的innerHTMLouterHTML。相反,與正則表達式解析HTML的做到這一點:

var el = document.querySelector("tr.AttCardFooter"); // I guess you have that variable already 
for (var i=0; i<el.cells.length; i++) { 
    var td = el.cells[i]; 
    if (td.title == "Saldo+") 
     var positiveSaldo = td.innerText; 
    else if (td.title == "Saldo-") 
     var negativeSaldo = td.innerText; 
} 
alert("Voila:\n"+positiveSaldo+"\n"+negativeSaldo); 

您可以使用自己喜愛的圖書館DOM功能改善這一點。例如jQuery中它會是這樣的

var el = $("tr.AttCardFooter"); 
var positiveSaldo = el.find('td[title="Saldo+"]').text(); 
var negativeSaldo = el.find('td[title="Saldo-"]').text(); 
0

你將不得不處理新的行字符。試試這個:

Pattern p = Pattern.compile(myRegExp, Pattern.DOT_ALL); 
0

Regular expressions cannot parse HTML.

如果錶行已經是你的文檔的一部分,那麼就沒有必要做任何幻想。使用DOM提取您需要的值 - Bergi has great suggestions

如果字符串來自其他地方,請考慮使用隱藏的<div>並設置它的innerHTML。瀏覽器處理解析字符串;然後你使用DOM方法來提取你需要的值。當然,如果這個「其他地方」是不可信輸入(第三方站點,用戶輸入等),由於將潛在可執行代碼盲目地粘貼到頁面中的安全問題,您不能僅使用隱藏的<div> 。相反,您需要在運行於不同Origin的上對此步驟進行沙箱處理。