Quel est la bonne l'expression régulière pour une liste à puce (BBCode) ?

Résolu
cs_fabiano13 Messages postés 262 Date d'inscription mardi 26 février 2002 Statut Membre Dernière intervention 27 février 2012 - 10 déc. 2008 à 14:41
cs_fabiano13 Messages postés 262 Date d'inscription mardi 26 février 2002 Statut Membre Dernière intervention 27 février 2012 - 10 déc. 2008 à 18:55
Re: Bonjour,

J'ai un problème en ce qui concerne la détection de plusieurs listes à puce en BBCode.
Pas de problème pour une seule liste à puce, mais lorsqu'il y en a plusieurs ça pose problème.
Alors quel est la bonne l'expression régulière ?

J'ai essayé le retour chariot après le dernier /list\r\n|\r|\n mais ça ne marche pas !

 ex : texte= texte.replace(/\[list=([^\]]*)\](.+)\[\/list]\r\n|\r|\n/mig, '$2');
 
<html>
<head>
<title>Prévisualisation</title>
</head>

<script>
function preview(sTxta,DivPrev) {
 var texte = document.getElementById(sTxta).value;
 texte=texte.replace(/</g, '&lt;');
 texte=texte.replace(/>/g, '&gt;');
 texte=texte.replace(/\r\n|\r|\n/g, ''); // simple saut de ligne ligne
 texte=texte.replace(/\n\n/mig, ''); // double saut de ligne
 texte=texte.replace(/\[(b|u|s|i|\/b|\/u|\/s|\/i)]/gi,'<$1>');
 texte=texte.replace(/\[list=([^\]]*)\](.+)\[\/list]/mig, '$2');
 texte=texte.replace(/\[\*]([^\[]+)(?=(\[\*])|(<\/ul>))/mig, '<li>$1</li>');
 texte=texte.replace(/\
<\/ul>/gi, '');
 texte=texte.replace(/<\/ul>
/gi, '');
 document.getElementById(DivPrev).innerHTML = texte;
}
</script>


<textarea rows="6" name="sTextarea" cols="54">sdgsdghksjdg


sdgsdjhgsdkjgsd
[list =1][*] gsdgkjshdgksdhgkjsdg
[*] sdgkjshdkgh sdkjghskdg
[*] sdgkhsdkgjshdkgsjdhgkj
/list


gfdhfdgdsgidsugkldsj glkjdsg lkdsjg ldshgkjshdg kjdsh glkjshd glkjdshg lkjdshg lskjdghsdkljgh sdkljgshd gkljsdhgkjshd gkljdshglkdsjgh dslkjgh sdlkgjshd glkjdshglksjdhglskdgsd g .
hfdhdfh
fdhfdh


fdhdfh
dfhfd
hfdhfdh
sdgsdghksjdg


sdgsdjhgsdkjgsd
[list=1][*] gsdgkjshdgksdhgkjsdg
[*] sdgkjshdkgh sdkjghskdg
[*] sdgkhsdkgjshdkgsjdhgkj
/list


gfdhfdgdsgidsugkldsj glkjdsg lkdsjg ldshgkjshdg kjdsh glkjshd glkjdshg lkjdshg lskjdghsdkljgh sdkljgshd gkljsdhgkjshd gkljdshglkdsjgh dslkjgh sdlkgjshd glkjdshglksjdhglskdgsd g .
hfdhdfh
fdhfdh


fdhdfh
dfhfd
hfdhfdh</textarea>

Prévisualisation

</html>

5 réponses

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
10 déc. 2008 à 18:48
A partir de l'expression régulière que tu as tu fais
le plus simplement du monde,
//-- Remplace les debuts de listes

texte=texte.replace(/\[list=([^\]]*)\]/mig, '');
//-- Remplace les fins de liste

texte=texte.replace(/\[\/list]/mig, '');
;O)
3
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
10 déc. 2008 à 18:22
Bonjour,
<table bgcolor= "#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">----, lorsqu'il y en a plusieurs ça pose
problème</td>
</td></tr></tbody></table>dans ton
expression il recherche et trouve la première occurence [liste=1] et recherche et trouve la dernière
occurence /liste, tous ce qui se trouve
entre est donc pris en compte...
le résulat affiché est alors le bon.

Pourquoi ne pas remplacer les [liste =1] dans un premier temps et les /liste dans un deuxième.
;O)
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
10 déc. 2008 à 18:26
Au fait au passage,
tu travailles avec une TEXTAREA
déclarée comme ceci... <textarea rows"6" name "sTextarea" cols="54">

alors que tu
récupéres l'objet avec ceci...
var texte = document.getElementById(sTxta).value;

Tu dois
utiliser IExplorer pour qu'il n'y ait pas
d'erreur.
;O)
0
cs_fabiano13 Messages postés 262 Date d'inscription mardi 26 février 2002 Statut Membre Dernière intervention 27 février 2012
10 déc. 2008 à 18:32
Tu as raison pour document.getElementById(), je l'avais oublié !

Mais j'ai quand même du mal a voir la solution que tu proposes !

Peux-tu me mettre dans le bonne ordre les expréssions régulières ?

D'avance merci,
Fabiano13
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_fabiano13 Messages postés 262 Date d'inscription mardi 26 février 2002 Statut Membre Dernière intervention 27 février 2012
10 déc. 2008 à 18:55
Tu as raison, le plus simplement du monde. MILLE MERCIS ! 

var texte = document.getElementById(sTxta).value;
 texte=texte.replace(/</g, '&lt;');
 texte=texte.replace(/>/g, '&gt;');
 texte=texte.replace(/\r\n|\r|\n/g, ''); // simple saut de ligne ligne
 texte=texte.replace(/\n\n/mig, ''); // double saut de ligne
 texte=texte.replace(/\[(b|u|s|i|\/b|\/u|\/s|\/i)]/gi,'<$1>');
 texte=texte.replace(/\[list=([^\]]*)\]/mig, '');
 texte=texte.replace(/\[\/list]/mig, '');
 texte=texte.replace(/\[\*]([^\[]+)(?=(\[\*])|(<\/ul>))/mig, '<li>$1</li>');
 texte=texte.replace(/\
<\/ul>/gi, '');
 texte=texte.replace(/<\/ul>
/gi, '');
 document.getElementById(DivPrev).innerHTML = texte;
0
Rejoignez-nous