accès aux groupes de discussion, consultation et publication d'articles, recherche de "newsgroups"...
membres, identifiez-vous
é-mail Mot de passe
nouveau ? mot de passe oublié ?
Chargement... Chargement en cours...

Groupes français belges canadiens suisses internationaux Nétiquette
Échangez opinions et commentaires dans les forums de discussion.

Re: [HS] Expression reguliere

 [  Nouvelle Discussion Nouvelle discussion  |  Répondre au groupe Répondre au groupe  |  fr.comp.lang.javascript ] 

Retour : Accueil du site fr comp lang javascript   charte stats de ce groupe


  Sujet:   Re: [HS] Expression reguliere  
 De: stephanemoriaux.NoAd...@wanadoo.fr.invalid (SAM)
 Groupes: fr.comp.lang.javascript
 Organisation: les newsgroups par Orange
 Date: 13. Jul 2008, 17:49:12
 References: 1
Résumé depuis f.c.l.php :

========= Etienne SOBOLE a écrit :
> 
> je cherche l'expression regulière qui compte un motif précis  répété 
> successivement du genre :
>      abcx2x2x2x2x2x2pq
> je cherche à compter les motif x2
> 
> j'aimerai transformer cette chaine en
>     abc#6pq
> indiquant pas là que j'ai 6 fois le motif recherché!
> 
> voila.
> ca se fait ca avec une expression régulière ???

======== SAM
sans expression régulière :
<http://cjoint.com/?hnbIeQxTmD>

========= Le 12/07/2008 12:55, Etienne SOBOLE a écrit :
 >>
 >> En fait j'utilise json coté javascript et json_decode cote php.
 >>
 >> le problème est que si en javascript j'ai un truc genre
 >> var tData = [];
 >> tData[5] = 10;
 >>
 >> la serialisation json va me donner un truc genre
 >>      [null,null,null,null,null,10]
 >> ce que je souhaite faire c'est remplacer ca par
 >>      [@N5_10]
 >> afin de réduire le flot de données a envoyer.

====== SAM

Je le fais sans expression régulière :

function compacter(tableau) {
var n = 0;
while(n<tableau.length && tableau[n]==null) n++;
return '@N'+n+'_'+tableau[n];
}
alert(compacter(tData));

======== Etienne SOBOLE a écrit :
 >
 > Interessant,
 > mais j'ai opté pour une méthode plus globale travaillant sur la chaine
 > une fois sérialisée, car la structure que je renvoie est trop complexe
 > pour que je m'amuse a chercher tous les tableaux.
 > Ça donne :
 >
 > var expr = /(null,)+/
 > var tRes = expr.exec(sDossier);
 > while (tRes)
 > {
 >  var sDossier = sDossier.replace(expr,
                  "@N" + (tRes[0].length / tRes[1].length) + "@");
 >  var tRes = expr.exec(sDossier);
 > }
 >
 > et ca remplace une liste de null, par @Nx@
 > où x est le nombre de "null," consécutifs trouvés !

========= Olivier Miakinen a écrit :
 >
 > Bon, voici une proposition en PHP,
 > tu peux l'adapter pour y mettre les caractères que tu veux à la place
 > de '#'.
 > ---------------------------------------------------------------------
 > <?php
 > header("Content-Type: text/plain");
 >
 > function repnull($matches)
 > {
 >     $count = strlen($matches[0]) / 5;
 >     return '#' . $count . substr($matches[0], -1);
 > }
 > function dorepnull($subject)
 > {
 >     return preg_replace_callback('/(?<=[[,])(null,)*null[],]/',
 >                           'repnull', $subject);
 > }
 > $a = '[null,null,null,null,null]';
 > $b = '[a,null,b,null,null,c,null,d]';
 > $c = '[nullard,annulle,null,tronull,"null",null,nul]';
 > echo $a . "\n-> " . dorepnull($a) . "\n";
 > echo $b . "\n-> " . dorepnull($b) . "\n";
 > echo $c . "\n-> " . dorepnull($c) . "\n";
 > ?>
 > ---------------------------------------------------------------------
 >
 > Le résultat de l'exécution est :
 > ---------------------------------------------------------------------
 > [null,null,null,null,null]
 > -> [#5]
 > [a,null,b,null,null,c,null,d]
 > -> [a,#1,b,#2,c,#1,d]
 > [nullard,annulle,null,tronull,"null",null,nul]
 > -> [nullard,annulle,#1,tronull,"null",#1,nul]
 > ---------------------------------------------------------------------

========= Olivier Miakinen a écrit :
 >
 > Tiens, il semblerait que ce soit possible en JavaScript aussi depuis 
 > la version 1.3 :
 > 
<http://developer.mozilla.org/fr/docs/R%C3%A9f%C3%A9rence_de_JavaScript_1.5_Core:Objets_globaux:String:replace#Exemple_:_utilisation_d.27une_fonction_inline_modifiant_les_caract.C3.A8res_trouv.C3.A9s>
 >
 > Donc :
 >
 > sujet.replace('/(?<=[[,])(null,)*null[],]/',
 >   function(match) {
 >     count = strlen(match)/5;
 >     last = match.substring(strlen(match)-1);
 >     return '#' + count + last;
 >   });
 >
 > (non testé)

à mon idée ce devrait être plus proche de :

function dorepnull(sujet) {
sujet = sujet.replace(/(?<=[[,])(null,)*null[],]/,
   function(match) {
     return '#' + match.length/5 + match.substring(match.length-1);
   });
return sujet;
}
alert(dorepnull($b));

Bon ... ça marche pô :-(

Erreur : invalid quantifier ?<=[[,])(null,)*null[],]
Code Source :
sujet = sujet.replace(/(?<=[[,])(null,)*null[],]/,

-- 
sm


DateSujet  Auteur
01.01.
o 
Groups Explorer contact votre avis comment ça marche? rechercher un groupe suggérer un groupe abuse accueil du site   Imprimer cette page   Envoyer cette page à un(e) ami(e)
Usenet Gratuit