2009-08-27 9 views
0

je une chaîne comme ceci:Expression régulière pour obtenir le contenu du corps

var str="<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title></title></head><body><table><tr><td style="color:#FF0000">demo1</td><td style="color:#FF0000">demo2</td></tr></table></body></html>"; 

Je dois obtenir le contenu à l'intérieur tous les éléments td seul en utilisant l'expression régulière en JavaScript. Ma sortie doit être:

var str="demo1 demo2" 

Comment faire? Une idée?

+2

Je ne pense pas que les expressions rationnelles soient la voie à suivre ici. – Geo

Répondre

2

Qu'en est-

var str = document.body.innerText || document.body.textContent; 
+0

Je reçois cette chaîne de responseText en utilisant ajax .. Comment puis-je utiliser document.body.innerText ou document.body.textContent .. Je ne sais pas que je peux utiliser cela avec ça. . –

+0

@senthil: Vous ne pouvez pas. – Guffa

1

utiliser une expression régulière comme /<td[^>]*>(.*?)</td>/ pour obtenir le contenu des cellules, puis les concaténer avec des espaces entre.

0
var str='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title></title></head><body><table><tr><td style="color:#FF0000">demo1</td><td style="color:#FF0000">demo2</td></tr></table></body></html>'; 
var resultM=new Array(), pattern=/<td[^>]*>(.+)<\/td>/, match; 
while(match=pattern.exec(str)) 
{ 
resultM.push(match[1]); 
} 
var result=resultM.join(" "); 
+0

Salut, j'ai eu l'o/p nécessaire si j'utilise votre code comme ci-dessus.Mais je ne reçois pas d'o/p si je l'utilise comme ça .. var str = req.responseText; Je forme cette chaîne à partir de la réponse ajax en lisant un fichier html. quelle peut être l'erreur ... ??? Plz laissez-moi savoir –

2

Mettre le tout ensemble, vous obtiendrez celui-ci:

var str='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title></title></head><body><table><tr><td style="color:#FF0000">demo1</td><td style="color:#FF0000">demo2</td></tr></table></body></html>'; 
var resultM=[], pattern=/<td[^>]*>(.*?)<\/td>/g, match; 
while(match=pattern.exec(str)) 
{ 
resultM.push(match[1]); 
} 
var result=resultM.join(" "); 
console.log(result); // demo1 demo2 
+0

Nice code ... Merci –

+0

Salut, J'ai eu le nécessaire o/p si j'utilise votre code comme ci-dessus.Mais je ne reçois pas o/p si je l'utilise comme ça .. var str = req. responseText; \t Je forme cette chaîne à partir d'une réponse ajax en lisant un fichier html. quelle peut être l'erreur ... ??? Plz laissez-moi savoir \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t var resultM = [], modèle =/] *> (. *?) <\/td>/g, correspondre; \t \t \t \t \t \t \t \t \t \t tandis que (match = pattern.exec (str)) \t \t \t \t \t \t \t \t \t \t { \t \t \t \t \t \t \t \t \t \t resultM.push (correspondance [1]); \t \t \t \t \t \t \t \t \t \t} \t \t \t \t \t \t \t \t \t \t var result = resultM.join ("\ n"); \t \t \t \t \t \t \t \t \t \t alerte (résultat); –

+0

salut, pouvez-vous s'il vous plaît nous montrer ce que la sortie de str ressemble juste après str = req.responseText? THX – bjoernwibben

1

Vous ne pouvez pas analyser de manière fiable HTML avec regexp. Vous cherchez "< td [^>] *>" pourrait fonctionner pour l'exemple que vous avez donné, mais tout ce qui sort de l'ordinaire, comme '>' dans une valeur d'attribut, ou '< td' dans un commentaire, ou omettre les balises, le confondrait. La meilleure chose à faire serait de changer le côté serveur de sorte qu'il renvoie les données d'une manière plus pratique à lire par JavaScript - normalement JSON.

Questions connexes