0
votes

Comment puis-je correspondre à répéter des sous-chaînes avec une regex?

J'essaie de trouver une expression régulière en JavaScript qui remplacera plusieurs instances du même modèle de chaîne.

permet de dire que j'ai la chaîne suivante:

  • élément 1
  • élément 2
  • élément 3

    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, élément 1 , élément 2 , article 3 < / code>).

    Actuellement, j'ai seulement réussi à le faire correspondre à la chaîne entière en utilisant /

  • (. *) <\ / li> / g

    Y a-t-il un moyen de le faire dans JavaScript Regex?


  • 2 commentaires

    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.


    3 Réponses :


    1
    votes

    Séquence de correspondance de caractères qui ne sont pas ou > code> ( [^ ] + code>), et a le caractère après it ( + (? = ) (voir REGEX101 ):

    p>

    const str = '<li>item 1</li><li>item 2</li><li>item 3</li>'
    
    const result = str.match(/[^<>]+(?=<)/g)
    
    console.log(result)


    0 commentaires

    0
    votes

    Vous pouvez faire quelque chose comme / <*. Li> / gm . str.replace (/ <*. Li> / gm, '') vous donnera la chaîne avec juste les éléments

    https://regex101.com/r/fg9y7k/1

    apprendre toujours la regex moi-même aussi probablement de meilleures réponses

    EDIT: Si vous voulez correspondre juste à l'intérieur des tags, voici un autre https://regex101.com/r/qpttsbi/1 / (? <= \ \>) (. *?) (? = <) / g


    0 commentaires

    1
    votes

    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);
    });


    0 commentaires