2010-12-14 4 views
0

J'essaie d'analyser un morceau de texte via JavaScript et, en lisant, j'ai appris que l'analyse du code HTML avec Regex est quite evil. Je voudrais supprimer une partie plus sinistre de mon texte avant de l'analyser.Comment puis-je supprimer un morceau de texte d'une chaîne Javascript?

Si j'ai un morceau de texte comme l'élément ci-dessous, comment puis-je (1) découper tout de [caption] à [/caption] et (2) stocker ce texte dans une nouvelle var?

Sed rutrum enim sit amet sem fringilla egestas placerat mauris pretium. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ultricies egestas malesuada. Etiam rhoncus eros a leo imperdiet vitae tincidunt purus laoreet. Mauris ut mauris quam, sed pharetra urna. Etiam eu enim mauris, vitae bibendum orci. Quisque ac sapien massa, at dignissim tellus. 

[caption id="blah" align="alignleft" width="123" caption="Lorem ipsum dolor sit, consectetur adipiscing elit."]<a href="http://www.google.com/something"><img title="Lorem ipsum dolor sit, consectetur adipiscing elit." src="http://google.com/something/else.png" alt="Lorem ipsum dolor sit, consectetur adipiscing elit." width="345" /></a>[/caption] 

Aenean faucibus mi sit amet leo suscipit nec egestas leo ultrices. Integer tincidunt, urna quis varius accumsan, urna quam congue nulla, ut ornare orci purus in ligula. Suspendisse varius, tellus aliquam tincidunt, ante semper elit, sit amet tincidunt elit augue eget odio. Vivamus sit amet tincidunt massa. Sed nunc ligula, feugiat quis volutpat congue, eleifend in tellus. Curabitur ut dictum felis. Nunc sodales euismod leo, in commodo elit ornare hendrerit. Cras luctus eros id nisl vestibulum elementum. Maecenas ut neque turpis. Donec ornare hendrerit rutrum. Non nibh leo, dictum ullamcorper dui. 
+1

vous avez utilisé '[légende]' (avec des crochets) ... voulez-vous dire '' (avec des crochets angulaires)? Il n'y a aucun problème à utiliser des crochets angulaires à l'intérieur d'un bloc de code dans S.O. – Lee

+0

Merci pour le commentaire. Croyez-le ou pas, je suis confronté à une modification de texte qui aime utiliser son propre code de pseudo. J'ai remarqué que les mêmes règles de "regex seront douloureuses" sont tout aussi sinon plus pertinentes. – buley

Répondre

1

Vous pouvez utiliser .split()

var temp = yourText.split("[caption") 

Cela vous donne:

temp [0] avec tout avant "[légende"

temp [1] avec tout ce qui suit « [ légende "

Vous pouvez ensuite continuer à diviser/joindre les fragments de tableau à Elimina te toute potion de la ficelle.

+1

soyez prudent si vous avez plusieurs occurrences de '[caption]' ... surtout si elles sont * imbriquées *: '[légende] quelle que [légende] substance [/ légende] autre chose [/ légende]'. – Lee

2

Vous pouvez également utiliser une expression régulière:

var split = text.split(/\[\/?caption[^\]]*\]/); 

et prendre séparation [1] comme résultat

1
  • Si vous analysez le texte brut il n'y a aucun moyen de le faire plus facile qu'avec regex , au moins il n'y a pas de fonctions intégrées dans js pour le faire.
  • Si vous analysez du code HTML dans un navigateur, il y a beaucoup de facilité à le faire en utilisant l'arborescence DOM et les fonctions DOM, ce qui est recommandé. Et les frameworks js comme jQuery rendent cette tâche aussi facile qu'elle pourrait l'être.
  • Si vous analysez HTML sur le serveur, par exemple par node.js, il y a aussi des librairies pour créer et travailler avec DOM comme jsdom, et encore une fois vous pouvez le faire en utilisant les fonctions DOM.