2010-05-12 2 views
0

Csharp Regex Pattern:JavaScript Regex проблемы

Regex rg = new Regex("(?i)(?<=>)[^<]+(?=</TD>)"); 

JavaScript Regex Pattern:

var pattern = (?i)(?<=>)[^<]+(?=</TD>); 

var result = str.match(pattern); 

Csharp Regex модель работы, но Javascript регулярное выражение шаблон не работает пожалуйста помочь?

+6

Вы должны принять ответ на свои предыдущие вопросы. – Alsciende

+5

Вы пытаетесь разобрать HTML с регулярными выражениями. Пожалуйста, не делайте этого, это неправильно, опасно и совершенно ненужно. – Tomalak

+0

@ Alsciende pls поможет вашему коду не работать – Chicharito

ответ

2

Если у вас есть фрагмент HTML в виде строки и в браузере, пытаясь потреблять его с JavaScript:

var str = "<TD>33,7</TD><TD>100</TD><TD>20,0</TD>"; 

var temp = document.createElement("tr"); 
temp.innerHTML = str; 

var tds = temp.getElementsByTagName("td") 
for (var i=0; i<tds.length; i++) { 
    alert(tds[i].textContent); // use .innerText in Internet Explorer 
} 

См? Никаких регулярных выражений не требуется - браузер имеет идеально способный HTML-парсер, встроенный, не нужно создавать свои собственные. При использовании основы JavaScript, как JQuery, выше становится еще проще:

$("<TD>33,7</TD><TD>100</TD><TD>20,0</TD>").find("td").each(function() { 
    alert($(this).text()); 
}); 
0

Там не, или просмотра назад встроенные модификаторы в JavaScript RE. Поэтому мы перемещаем (?i) в конец регулярного выражения: //i. Просмотра назад немного сложнее, чтобы имитировать, поэтому его легче просто принять тот факт, что она не может быть сделано, и вместо того, чтобы использовать захват группы, чтобы найти то, что вам нужно:

var pattern = />([^<]+)<\/TD>/i; 
var result = str.match(pattern); 

// the match you want is in result[1] 

EDIT: Кажется, работает штраф на обеих строках вы обеспечили:

"<td class='asd'>sd</td>".match(/>([^<]+)<\/TD>/i) 
// [">sd</td>", "sd"] 

Если вы хотите, чтобы соответствовать несколько элементов в одной и той же строки, вы можете аб использовать replace() метод что-то вроде этого:

var textInTds = []; // empty array we will fill up: 
"<td>bla1</td><td class='asd'>sd</td>".replace(/>([^<]+)<\/TD>/ig, function($0, $1) { 
    textInTds.push($1); // push onto the array 
    return $0; // return the original text so that it doesn't destroy the string 
}); 

// textInTds -> ["bla1", "sd"] 
+0

pls bla1 работаю, но другие 'td' sd не работают другие td – Chicharito

+0

@oraclee: Мальчик ... вы уверены, что имеете неправильное отношение. Как насчет того, чтобы комментировать фактические решения, которые вы получили, и отвечать на заданные вами вопросы, вместо того, чтобы разбрызгивать «не работает» и «PLS Help» комментарии повсюду. – Tomalak