2010-01-19 3 views
1

donné la chaîne suivante:En Javascript ou jQuery, comment supprimer uniquement le premier et le dernier tag?

var htmlStr = '<p class="red_349dsa01">This is</p><p class="blue_saf9vsaz">a test</p>'; 

comment puis-je supprimer la première et dernière balise de cette chaîne? Ce serait le résultat:

var htmlStr = 'This is</p><p class="blue_saf9vsaz">a test'; 

Je sais que cela va créer HTML invalide, mais je veux juste savoir si cela peut être fait du tout.

+0

Avez-vous vraiment besoin de faire cela? Jquery a un grand support pour manipuler HTML mais seulement si vous utilisez un HTML valide, par exemple il est très facile d'obtenir le premier paragraphe – AlfaTeK

Répondre

2

Vous pouvez essayer quelque chose comme

var htmlStr = '<p class="red_349dsa01">This is</p><p class="blue_saf9vsaz">a test</p>'; 
alert(htmlStr.substring(htmlStr.indexOf('>') + 1, htmlStr.lastIndexOf('<'))); 
+0

J'aime toujours voir une option non-regex, mais après tout le fractionnement, l'inversion, le retour et recherche de chaîne, serait-ce plus rapide? –

+0

C'était la seule implémentation inverse que j'ai trouvée. Beaucoup de langages ont construit dans l'inversion de chaîne, et je trouve que c'est la façon la plus simple de trouver une dernière référence, à moins que le langage n'implémente indexOf avec une recherche négative. –

+0

Trouvé, drôle enoug, c'était ** lastIndexOf **. Désolé, cela semble beaucoup plus facile. –

2

Vous auriez besoin d'une expression régulière ici:

var regex = /(?:^<p[^>]*>)|(?:<\/p>$)/g; 
var htmlStr = '<p class="red_349dsa01">This is</p><p class="blue_saf9vsaz">a test</p>'; 
htmlStr.replace(regex, ""); 

Une explication de l'expression rationnelle:

  1. La première partie (?:^<p[^>]*>) utilise le caractère caret ^ pour correspondre au début de la chaîne,
  2. puis <p correspondra au début de l'ouverture p tag,
  3. [^>]* correspond à tout caractère sauf le caractère >,
  4. la | divise l'expression en deux, une de chaque paire d'entretoises où soit peuvent être mis en correspondance,
  5. l'expression <\/p>$ correspondra à une fermeture </p> tag seulement si elle est juste à la fin de la chaîne en utilisant le caractère $.
Questions connexes