regex en js

a marqué ce sujet comme résolu.

Bonjour à vous j’ai ce string là:

[span class="intsuma"][span class="lim-up" id="a"]10[/span][span class="sum"]∫[/span][span class="lim" id="b"]2[/span][/span][span id="corps"]sinx dx[/span]

J’aimerais remplacer les [span ][/span] pour interpreter comme des html. J’ai essayé ça desc.replace(/\[span (.*)\](.*)\[\/span\]/gi, "<span $1>$2</span>") j’obtiens pas le resultat escompté.

Pouvez-vous me mettre sur la piste? merci

Hello,

Ça fait un moment que j’ai pas touché à des regex du genre, on dirait un BBcode !

J’ai pu obtenir un résultat un peu plus précis que le tien en utilisant \[span(.*?)\](.*?)\[\/span\] comme motif ((.*) est devenu (.*?)), mais c’est pas encore ça : les groupes de balises ouvrantes/fermantes ne sont pas bons.

Pour info ça donne ça : https://regex101.com/r/Oywtsw/2


EDIT : peut-être une piste en utilisant une recherche depuis la fin de la chaîne ?

Salut,

Sachant que le BBCode n’est pas un langage régulier, tu ne pourras pas le parser en arbre avec des regex.

Alors, plutôt que de tenter de matcher les paires de balises, tu pourrais simplement remplacer les [span ...] par des <span ...> et les [/span] par des </span>.

Merci @viki53 j’essaye ça pour voir.

ça marche bien le seul problème c’est ça:

<span class='"intsuma"'></span>

Les valeurs des class et les id sont précédé par ' ' comme dans le résultat ci-dessus.

Voici ma regex:


function transformFormula(desc){
    desc = desc.replace(/\[span (.*?)\]/gi, "<span $1>");
    desc = desc.replace(/\[\/span\]/gi, "</span>");
    return desc;
}

C’est ce qui fausse mon rendu.

+0 -0
function transformFormula(desc){
    desc = desc.replace(/\[span (.*?)\]/gi, "<span $1>");
    desc = desc.replace(/\[\/span\]/gi, "</span>");
    return desc;
}

C’est dû au fait que j’utilise $1 qui lui met ' ' en même temps sur les groupes il y a un moyen des enlevés ?

J’ai remplacé la fonction du haut par celle du bas. ça fonctionne bien maintenant.


function transformFormula(desc){
    desc = desc.replace(/\[span (.*?)\]/gi, 
                        (_, match) => "<span "+match.replaceAll("&quot;", "")+">");
    desc = desc.replace(/\[\/span\]/gi, "</span>");
    return desc;
}
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte