2012-04-02 7 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 –

+0

Должно быть подсчитано, сколько вопросов в регулярном выражении JavaScript связано с разбором HTML. – maerics

ответ

2

Don't use a regexp. Я думаю, ваш фрагмент html - это innerHTML или outerHTML какого-то элемента. Вместо разбора 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); 

Вы можете улучшить это с вашими любимыми библиотеки Dóm функции. Например, в 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

Попробуйте этот флаг и добавьте флаг, чтобы точка соответствовала новым строкам.

http://xregexp.com/

0

Regular expressions cannot parse HTML.

Если строка таблицы уже является частью документа, то нет никакой необходимости делать что-либо фантазии. Используйте DOM для извлечения необходимых значений - Bergi has great suggestions.

Если строка взята из другого места, рассмотрите возможность использования скрытого <div> и установите ее innerHTML. Браузер обрабатывает синтаксический анализ строки; вы затем используете методы DOM для извлечения необходимых значений.

Конечно, если это «где-то еще» является ненадежным вводом (сторонний сайт, ввод пользователя и т. Д.), Вы не можете просто использовать скрытый <div> из-за проблем безопасности слепого прикрепления потенциально исполняемого кода на вашу страницу , Вместо этого вам нужно выполнить эту операцию в , работающем на другом Origin.

Смежные вопросы