0
votes

Regex pour assortir le texte entre deux tags

J'ai ce texte xxx

je veux obtenir le texte entre tags, j'ai cet express mais cela ne fonctionne pas pour moi: < code> / \ << / g

Remarque:

La balise pourrait tout ce que quelque chose comme #x c'est juste un Délimiteur à la partie de cette partie du texte.

Comment puis-je résoudre ce problème?


2 commentaires

Stackoverflow.com/a/1732454/85615


Est-il correct que ces deux tags sont plutôt que et ?


4 Réponses :


2
votes

Quelque chose comme ça devrait faire le travail: xxx pré>

ceci spécifie les éléments suivants: p>

  1. Faites correspondre les caractères code>. li>
  2. Acceptez tous les caractères qui sont non forts> ou strud> non suivi de exclude> code>. li>
  3. Le match ne peut finir que s'il est suivi des caractères code>. li>
  4. Capturez les caractères entre les deux étiquettes du groupe 1. LI> ol>

    pour quelque chose de plus simple comme la balise #x code> Vous pouvez utiliser le même principe: p> xxx pré>

    p>

    var text = `
    Donec ante sapien, gravida id risus eget,
    <exclude>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec quis neque ex. Aenean ac leo quis ex lobortis aliquam. Donec libero dolor, sodales in molestie vel, sagittis at nulla. Proin egestas dolor turpis. Aliquam erat volutpat. Nunc eget enim varius, condimentum tortor sit amet, aliquet magna. Phasellus ut libero quis diam dignissim interdum. Sed commodo iaculis vestibulum. Quisque viverra diam sed orci rhoncus luctus. Mauris leo mauris, consequat at lacinia sit amet, viverra vitae enim. Donec maximus, ipsum in bibendum volutpat, est erat dapibus leo, et iaculis arcu augue in dolor.
    <exclude>
    Donec ante sapien, gravida id risus eget,
    `.trim();
    
    var regex = /<exclude>((?:[^<]|<(?!exclude>))*)(?=<exclude>)/g;
    
    while (match = regex.exec(text)) {
      console.log(match[1]);
    }


1 commentaires

Vous pouvez changer (? = ) pour simplement . Ceci a l'effet suivant: 1 2 3 correspondrait à 1 , 2 > 3 . Faire de cette modification laisserait correspondre à 1 et 3 .



0
votes

Assumer que vos données sont correctes et ce n'est pas réellement XML (pour lequel vous devez utiliser un analyseur XML à la place). Compte tenu de votre exemple spécifique, cela fonctionnerait:

p>

var str = `Donec ante sapien, gravida id risus eget,
<exclude>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec quis neque ex. Aenean ac leo quis ex lobortis aliquam. Donec libero dolor, sodales in molestie vel, sagittis at nulla. Proin egestas dolor turpis. Aliquam erat volutpat. Nunc eget enim varius, condimentum tortor sit amet, aliquet magna. Phasellus ut libero quis diam dignissim interdum. Sed commodo iaculis vestibulum. Quisque viverra diam sed orci rhoncus luctus. Mauris leo mauris, consequat at lacinia sit amet, viverra vitae enim. Donec maximus, ipsum in bibendum volutpat, est erat dapibus leo, et iaculis arcu augue in dolor.
<exclude>
Donec ante sapien, gravida id risus eget,`;

console.log(/<exclude>(.*?)<exclude>/gs.exec(str)[1]);


2 commentaires

Quand le drapeau s a-t-il été ajouté? Je reçois l'erreur "SyntaxError: drapeau d'expression régulier invalide s" .


Voir: Stackoverflow.com/a/1068308/1250301



1
votes

var str = 
"Donec ante sapien, gravida id risus eget,\n" +
"<exclude>\n" +
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec quis neque ex. Aenean ac leo quis ex lobortis aliquam. Donec libero dolor, sodales in molestie vel, sagittis at nulla. Proin egestas dolor turpis. Aliquam erat volutpat. Nunc eget enim varius, condimentum tortor sit amet, aliquet magna. Phasellus ut libero quis diam dignissim interdum. Sed commodo iaculis vestibulum. Quisque viverra diam sed orci rhoncus luctus. Mauris leo mauris, consequat at lacinia sit amet, viverra vitae enim. Donec maximus, ipsum in bibendum volutpat, est erat dapibus leo, et iaculis arcu augue in dolor.\n" +
"<exclude>\n" +
"Donec ante sapien, gravida id risus eget,\n"

var regex = /<exclude>([\S\s]*?)<exclude>/g;
var found = regex.exec( str )[1];

console.log( found );


0 commentaires

0
votes

Un moyen de concevoir une expression pour une telle sortie est d'utiliser des groupes de capture que la plupart des réponses utilisent déjà cela.

En outre, vous pouvez ajouter d'autres indicateurs tels que multilignes ou une ligne unique (en fonction de votre chaîne d'entrée) à votre expression, comme vous le souhaitez. Cet outil pourrait vous aider à le faire, concevoir et tester vos expressions et voir comment ils fonctionnent : P>

 Entrez la description de l'image ici p>

regex h3> xxx pré>

graphique h3>

Ce graphique montre comment l'expression fonctionnerait: p>

 Entrez la description de l'image ici p>

performance h3>

Cet extrait JavaScript montre la performance de cette expression en utilisant un simple million de fois pour code> boucle. p>

p>

repeat = 1000000;
start = Date.now();

for (var i = repeat; i >= 0; i--) {
	var string = "Donec ante sapien, gravida id risus eget,\n" +
		"<exclude>\n" +
		"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec quis neque ex. Aenean ac leo quis ex lobortis aliquam. Donec libero dolor, sodales in molestie vel, sagittis at nulla. Proin egestas dolor turpis. Aliquam erat volutpat. Nunc eget enim varius, condimentum tortor sit amet, aliquet magna. Phasellus ut libero quis diam dignissim interdum. Sed commodo iaculis vestibulum. Quisque viverra diam sed orci rhoncus luctus. Mauris leo mauris, consequat at lacinia sit amet, viverra vitae enim. Donec maximus, ipsum in bibendum volutpat, est erat dapibus leo, et iaculis arcu augue in dolor.\n" +
		"<exclude>\n" +
		"Donec ante sapien, gravida id risus eget,\n";
	var regex = /(.+)(<exclude>)(.+)(<exclude>)(.+)/gms;
	var match = string.replace(regex, "$3");
}

end = Date.now() - start;
console.log("YAAAY! \"" + match + "\" is a match 💚💚💚 ");
console.log(end / 1000 + " is the runtime of " + repeat + " times benchmark test. 😳 ");


0 commentaires