2012-04-02 53 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的上对此步骤进行沙箱处理。