2010-05-12 6 views
0

Csharp Regex Motif:JavaScript Regex Problème

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

JavaScript Regex Motif:

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

var result = str.match(pattern); 

travail modèle Csharp Regex, mais javascript modèle regex travail non pls aider?

+6

Vous devez accepter une réponse à vos questions précédentes. – Alsciende

+5

Vous essayez d'analyser HTML avec des expressions régulières. S'il vous plaît ne faites pas cela, c'est faux, dangereux et complètement inutile. – Tomalak

+0

@Alsciende pls aider votre code ne fonctionne pas – Chicharito

Répondre

2

En supposant que vous avez un fragment HTML sous forme d'une chaîne et sont dans un navigateur, en essayant de le consommer avec 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 
} 

Voir? Aucune expression régulière nécessaire - le navigateur a un analyseur HTML parfaitement intégré, pas besoin de créer le vôtre. Lorsque vous utilisez un framework JavaScript comme jQuery, ci-dessus est encore plus facile:

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

Il n'y a pas, ou des modificateurs d'assertions arrières inline en JavaScript RE. Donc, nous passons le (?i) à la fin de l'expression rationnelle: //i. Le lookbehind est un peu plus difficile à imiter, donc il est plus facile de simplement accepter le fait qu'il ne peut se faire et au lieu d'utiliser un groupe de capture pour trouver ce dont vous avez besoin:

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

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

EDIT: semble fonctionner bien sur les deux chaînes que vous avez fournies:

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

Si vous voulez faire correspondre plusieurs éléments dans la même chaîne que vous pouvez ab utiliser la méthode replace() quelque chose comme ceci:

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 travail mais autre 'td' sd ne fonctionne pas autre td – Chicharito

+0

@oraclee: Boy ... vous avez certainement une mauvaise attitude. Que diriez-vous de commenter sur les solutions réelles que vous avez et de répondre aux questions qui vous ont été posées au lieu de saupoudrer "ne fonctionne pas" et "pls aider" des commentaires partout. – Tomalak