J'essaie de trouver une expression régulière en JavaScript qui remplacera plusieurs instances du même modèle de chaîne. P>
permet de dire que j'ai la chaîne suivante: p>
Il n'y a pas de nouveau caractère de ligne entre chaque élément de la liste et je souhaite correspondre à chaque élément de la liste individuelle (par exemple, Actuellement, j'ai seulement réussi à le faire correspondre à la chaîne entière en utilisant Y a-t-il un moyen de le faire dans JavaScript Regex? P> élément 1 code>, élément 2 code>, article 3 < / code>). p>
/
3 Réponses :
Séquence de correspondance de caractères qui ne sont pas p> ou > code> ( [^ ] + code>), et a le caractère après it ( + (? = ) (voir REGEX101 ): const str = '<li>item 1</li><li>item 2</li><li>item 3</li>'
const result = str.match(/[^<>]+(?=<)/g)
console.log(result)
Vous pouvez faire quelque chose comme https://regex101.com/r/fg9y7k/1 P>
apprendre toujours la regex moi-même aussi probablement de meilleures réponses p>
EDIT:
Si vous voulez correspondre juste à l'intérieur des tags, voici un autre
https://regex101.com/r/qpttsbi/1
/ <*. Li> / gm code>. str.replace (/ <*. Li> / gm, '') code> vous donnera la chaîne avec juste les éléments p>
/ (? <= \ \>) (. *?) (? = <) / g code> p> P>
La bonne façon de le faire est d'analyser la chaîne et d'utiliser les fonctions de gestion DOM de JavaScript.
p>
var htmlString = '<li>item 1</li><li>item 2</li><li>item 3</li>'
var parser = new DOMParser();
var htmlDocument = parser.parseFromString(htmlString, 'text/html');
htmlDocument .querySelectorAll('li').forEach(el => {
console.log(el.innerText);
});
Vous ne devriez pas utiliser Regex pour cela. Juste analyser la chaîne.
Si vous utilisez effectivement ceci pour HTML, Just FYI: Vous rencontrez des cas de grande taille pour analyser HTML à l'aide d'expressions régulières. Sauf si vous attendez HTML très simple et contraint (c'est-à-dire non aléatoire HTML entré par un utilisateur), vous irez probablement bien. Mais si vous créez un outil générique pour traiter HTML de quelque sorte, cela ne fonctionnera pas 100% du temps.