JeuWeb - Crée ton jeu par navigateur
[réglé] Remplacements multiples avec RegExp - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [réglé] Remplacements multiples avec RegExp (/showthread.php?tid=1503)



[réglé] Remplacements multiples avec RegExp - Roworll - 24-07-2007

J'ai un soucis avec RegExp.

Je souhaite remplacer des morceaux de texte placés entre deux balises.
Supposons que je souhaite transformer la phrase
Code :
Bon anniversaire <PhPJeux.net> !
en
Code :
Bon anniversaire <b>PhPJeux.net</b> !
Le code Js correspondant serait:
Code :
var s='Bon anniversaire <b>PhPJeux.net</b> !';
s=s.replace(/<(.*)>/g,'<b>$1</b>');
Dans ce cas, tout marche bien.

Maintenant, si je souhaite transformer
Code :
Bon anniversaire <PhPJeux.net> ! Longue vie à <PhPJeux.net> !
en utilisant le même RegExp, le résultat est
Code :
Bon anniversaire <b>PhPJeux.net> ! Longue vie à <PhPJeux.net</b> !
alors que je veux
Code :
Bon anniversaire <b>PhPJeux.net</b> ! Longue vie à <b>PhPJeux.net</b> !
Le RegExp ne transforme que la première et dernière occurence des < >.

Existe-t-il un RegExp correspondant à ce que je souhaite faire ?


RE: Remplacements multiples avec RegExp - naholyr - 24-07-2007

Les regex sont gourmandes par défaut, c'est-à-dire que le masque essaie systématiquement de capturer la plus longue chaine possible correspondante.
Pour passer en mode «non gourmand» (ungreedy) c'est l'option "u" ou le point d'interrogation après le quantifieur.
Comme je ne suis pas sûr que JS accepte l'option "u", on va utiliser la deuxième solution, donc tu ajoutes simplement un "?" juste après ton "*" ou ton "+" (le quantifieur).

-> /<(.*?)>/


RE: Remplacements multiples avec RegExp - Roworll - 24-07-2007

Effectivement, j'avais eu les infos sur l'option 'u' mais j'avais zappé l'avantage du ?
Ca me semble fonctionner correctement.

Merci !