Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2715 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Expression régulière : j'y suis presque mais...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Expression régulière : j'y suis presque mais...

n°1582885
magicien96
Même pas peur @sato
Posté le 05-07-2007 à 16:29:31  profilanswer
 

Bonjour :)

 

Je planche sur une regexp en javascript.

 

Je dois changer 'ValidValues':[G1.1,G2.2,G3.1,G6.5] par 'ValidValues':[1.1,2.2,3.1,6.5] (on enlève les G donc...)
Cette chaine se trouve parmis beaucoup d'autres.
le nombre de motif type "G1.2" est indéterminé entre les crochets.

 

Je suis arrivé là :

 
Code :
  1. var chaine = "'ValidValues':[G1.1,G2.2,G3.1,G6.5]";
  2. var exp = new RegExp(/('ValidValues'\:\[)G\[([0-9]+\.[0-9]+),*\]/g);
  3. alert(chaine.replace(exp, "$1$2" ));
  4. var exp2 = new RegExp( /\G([0-9]+\.[0-9]+)/g )
  5. alert(chaine.replace(exp2, "$1" ));
 

exp permet de virer le premier G
exp2 permet de virer tous les G

 

Reste à les rassembler sans pour autant que ça vire tous les G de la chaine autre que celle précisée :D
Et là je sèche  [:airforceone]

Message cité 1 fois
Message édité par magicien96 le 05-07-2007 à 16:30:07

---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
mood
Publicité
Posté le 05-07-2007 à 16:29:31  profilanswer
 

n°1583933
magicien96
Même pas peur @sato
Posté le 09-07-2007 à 11:49:00  profilanswer
 

J'ai réussit partiellement grâce à ça :

 
Code :
  1. //Cas des nombres réels : transforme une valeur de type G1.1 en 1.1 tout court
  2. expGlobale = new RegExp(/(.*'ValidValues'\:\[)(G[0-9].[0-9]+.*)(\].*)/g);
  3. if ( expGlobale.test(str) ) {
  4. expLocale = new RegExp( /G([0-9]+\.[0-9]+)/g );
  5. expGlobale.exec(str);
  6. strTemp = RegExp.$3;
  7. str = RegExp.$1 + (RegExp.$2).replace(expLocale, "$1" ) + strTemp;
  8. }
 

Je viens malheureusement de m'aperçevoir que ça fonctionne uniquement pour la dernière occurence trouvé et non toutes les occurences :(

 

J'espère avoir plus d'aide que la première fois  :sweat:


Message édité par magicien96 le 09-07-2007 à 11:49:37

---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
n°1583957
bignose
Posté le 09-07-2007 à 12:57:16  profilanswer
 

Essaie simplement :   str.replace(/g/ig, '');
 
le ''  représente une chaine vide.

n°1583960
magicien96
Même pas peur @sato
Posté le 09-07-2007 à 13:08:54  profilanswer
 

Impossible : j'ai des g dans le reste de l'expression.
Je regarde du côté de "match" pour essayer de découper par rapport aux portions à modifier.


---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
n°1583969
bignose
Posté le 09-07-2007 à 13:14:22  profilanswer
 

Tu veux dire que tu as de G en dehors des crochets,  c'est bien ça ?

n°1583975
anapajari
s/travail/glanding on hfr/gs;
Posté le 09-07-2007 à 13:17:37  profilanswer
 

Est ce que tu as des G suivis par des chiffres hors de crochets?
Si c'est pas le cas je ferais un petit:

Code :
  1. str.replace(/G([\d\.]+)/g, "$1" );

n°1583976
cgo2
Dum spiro spero
Posté le 09-07-2007 à 13:18:45  profilanswer
 

Si oui alors l'exemple n'est pas bon, faudrait savoir...


---------------
When it's from Finland it's good.  - Mon blog
n°1583978
magicien96
Même pas peur @sato
Posté le 09-07-2007 à 13:22:07  profilanswer
 

cgo2 a écrit :

Si oui alors l'exemple n'est pas bon, faudrait savoir...

 
magicien96 a écrit :

Je dois changer 'ValidValues':[G1.1,G2.2,G3.1,G6.5] par 'ValidValues':[1.1,2.2,3.1,6.5] (on enlève les G donc...)
Cette chaine se trouve parmis beaucoup d'autres.

 
anapajari a écrit :

Est ce que tu as des G suivis par des chiffres hors de crochets?
Si c'est pas le cas je ferais un petit:

Code :
  1. str.replace(/G([\d\.]+)/g, "$1" );


 

Oui c'est possible, la chaine de base pouvant faire aisément plusieurs centaines de caractères et donc avec la possibilité d'avoir des G précédés de crochets et suivis par des chiffres :() Faut vraiment que j'isole ça.

Message cité 1 fois
Message édité par magicien96 le 09-07-2007 à 13:23:17

---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
n°1583980
cgo2
Dum spiro spero
Posté le 09-07-2007 à 13:24:41  profilanswer
 

et "ValidValues" il apparait en plusieurs exemplaires ?


---------------
When it's from Finland it's good.  - Mon blog
n°1583981
magicien96
Même pas peur @sato
Posté le 09-07-2007 à 13:25:32  profilanswer
 

magicien96 a écrit :

Oui c'est possible, la chaine de base pouvant faire aisément plusieurs centaines de caractères et donc avec la possibilité d'avoir des G précédés de crochets et suivis par des chiffres :() Faut vraiment que j'isole ça.


 
J'ai oublié la fin : faut vraiment que j'isole ça par rapport au validvalues qui les précède à chaque fois.


---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
mood
Publicité
Posté le 09-07-2007 à 13:25:32  profilanswer
 

n°1583984
magicien96
Même pas peur @sato
Posté le 09-07-2007 à 13:28:07  profilanswer
 

cgo2 a écrit :

et "ValidValues" il apparait en plusieurs exemplaires ?


 
Oui.
 
Voilà un exemplet complet et concret:
 

Code :
  1. [
  2. {'DisplayName':'Nb de jours','FixedRows':true,'ID':2,'MaxRows':1,'Name':'Nb_de_jours','NumRows':1,'Required':true,'Search':true,'Type':2},
  3. {'DisplayName':'Date début','FixedRows':true,'ID':3,'MaxRows':1,'Name':'Date_début','NumRows':1,'Required':false,'Search':true,'TimeField':false,'Type':-7},
  4. {'DisplayName':'chp réel','FixedRows':true,'ID':4,'MaxRows':1,'Name':'chp_réel','NumRows':1,'Required':false,'Search':true,'Type':-4},
  5. {'DisplayName':'case à cocher','FixedRows':true,'ID':5,'MaxRows':1,'Name':'case_à_cocher','NumRows':1,'Search':false,'Type':5},
  6. {'DisplayLen':32,'DisplayName':'champ texte','FixedRows':true,'ID':6,'Length':32,'MaxRows':1,'Name':'champ_texte','NumRows':1,'Required':false,'Search':true,'Type':-1},
  7. {'Columns':32,'DisplayName':'texte multiligne','FixedRows':true,'ID':7,'MaxRows':1,'Name':'texte_multiligne','NumRows':1,'Required':false,'Rows':3,'Search':true,'Type':11},
  8. {'DisplayName':'Liste déroulante','FixedRows':true,'ID':8,'MaxRows':1,'Name':'Liste_déroulante','NumRows':1,'Required':false,'Search':true,'Type':12,'ValidValues':[1,2,3,6]},
  9. {'DisplayName':'Liste déroulante Nombre réel','FixedRows':true,'ID':9,'MaxRows':1,'Name':'Liste_déroulante_Nombre_réel1','NumRows':1,'Required':false,'Search':true,'Type':20,'ValidValues':[G1.1,G2.2,G4.4]},
  10. {'DisplayName':'Liste déroulante Nombre réel','FixedRows':true,'ID':9,'MaxRows':1,'Name':'Liste_déroulante_Nombre_réel2','NumRows':1,'Required':false,'Search':true,'Type':20,'ValidValues':[1.1,2.2,4.4]},
  11. {'DisplayName':'Liste déroulante date','FixedRows':true,'ID':10,'MaxRows':1,'Name':'Liste_déroulante_date','NumRows':1,'Required':false,'Search':true,'Type':13,'ValidValues':[D/2007/4/29:0:0:0,D/2007/4/30:0:0:0]},
  12. {'DisplayName':'référence élément','FixedRows':true,'ID':11,'IsNodeID':true,'MaxRows':1,'Name':'référence_élément','NodeTypes':[207],'NumRows':1,'Type':305},
  13. {'DisplayName':'Liste déroulante texte','FixedRows':true,'ID':12,'MaxRows':1,'Name':'Liste_déroulante_texte','NumRows':1,'Required':false,'Search':true,'Type':10,'ValidValues':['youhou','hhi','grogro']},
  14. {'DisplayName':'Champ utilisateur','FixedRows':true,'ID':13,'MaxRows':1,'Name':'Champ_utilisateur','NumRows':1,'Required':false,'Search':true,'SelectGroup':false,'Type':14},
  15. {'DisplayName':'Liste déroulante utilisateur','FixedRows':true,'ID':14,'IsUser':true,'MaxRows':1,'Name':'Liste_déroulante_utilisateur','NumRows':1,'Required':false,'Search':true,'Type':19,'ValidValues':[1000,5364]},
  16. {'DisplayName':'chp super grand','FixedRows':true,'ID':15,'MaxRows':1,'Name':'chp_super_grand','NumRows':1,'Required':false,'Search':true,'Type':10,'ValidValues':['fenqiocjeqh','feqfez,ipo','fjeioqjfejfp','jfeopqfqej','icwucwoi','wcuioàceip','ckpckqe']},
  17. {'DisplayName':'data super grand','FixedRows':true,'ID':16,'MaxRows':1,'Name':'data_super_grand','NumRows':1,'Required':false,'Search':true,'Type':13,'ValidValues':['2007/1/3:0:0:0','2007/5/3:0:0:0','2007/3/3:0:0:0','2007/2/3:0:0:0','2007/8/3:0:0:0','2007/10/3:0:0:0','2007/11/3:0:0:0','2007/4/3:0:0:0']}
  18. ]


---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
n°1583989
cgo2
Dum spiro spero
Posté le 09-07-2007 à 13:30:41  profilanswer
 

Mais c'est du JSON, pourquoi tu t'emmerdes ?


---------------
When it's from Finland it's good.  - Mon blog
n°1583993
magicien96
Même pas peur @sato
Posté le 09-07-2007 à 13:31:52  profilanswer
 

cgo2 a écrit :

Mais c'est du JSON, pourquoi tu t'emmerdes ?


 
C'est justement parceque c'est une conversion en JSON que ça merde :D
 
le G devant les réel et le D devant les dates, ça fait planter l'eval du tableau :(


---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
n°1584017
cgo2
Dum spiro spero
Posté le 09-07-2007 à 14:01:54  profilanswer
 

D'accord, mais ça serait pas plus simple de fixer ton convertisseur JSON plutôt ? D'ailleurs il me semble qu'en théorie c'est des double quote qu'il faut (" et non ').


---------------
When it's from Finland it's good.  - Mon blog
n°1584024
magicien96
Même pas peur @sato
Posté le 09-07-2007 à 14:05:09  profilanswer
 

cgo2 a écrit :

D'accord, mais ça serait pas plus simple de fixer ton convertisseur JSON plutôt ? D'ailleurs il me semble qu'en théorie c'est des double quote qu'il faut (" et non ').


 
Euuh, comment ça marche un convertisseur JSON alors [:kaillou38]  
Ya moyen de dire à l'éval de javascript comment réagir ?


---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
n°1584035
anapajari
s/travail/glanding on hfr/gs;
Posté le 09-07-2007 à 14:13:30  profilanswer
 

je pense que cgo2 parlait "du truc sur le serveur" qui envoyait le json au navigateur...

n°1584037
cgo2
Dum spiro spero
Posté le 09-07-2007 à 14:17:28  profilanswer
 

exactement


---------------
When it's from Finland it's good.  - Mon blog
n°1584041
magicien96
Même pas peur @sato
Posté le 09-07-2007 à 14:22:25  profilanswer
 

cgo2 a écrit :

exactement


Ah oki.
Donc non, c'est pas possible : je tire ça d'une base SQL dont le format ressemblait un peu au JSON donc j'ai modifié le format grâce à javascript pour qu'il ne soit pas presque en Json mais EN Json...
Il ne fallait que quelques modifs à la base... et ça marchait très bien :)
Mais là, j'ai eu une tuile quand j'ai rajouté les options de validvalues :sweat:


---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
n°1584109
anapajari
s/travail/glanding on hfr/gs;
Posté le 09-07-2007 à 15:57:17  profilanswer
 

euh .... [:w3c compliant]
C'est pas ton js qui fait la requete sur la base ni l'envoi du json au navigateur.
c'est bien "quelque chose" qui tourne coté serveur, non?
Pourquoi tu n'utilises pas ce "quelque chose" pour faire tes traitements plutôt?
En dehors du coté pratique, cela sera bien plus optimisé de faire des traitements de chaine coté serveur.

n°1584113
magicien96
Même pas peur @sato
Posté le 09-07-2007 à 16:01:14  profilanswer
 

Tout simplement parceque c'est un logiciel propriétaire et que je ne peux pas avoir accès à sa façon de stocker des données dans sa base :(

 

edit : mon js demande la valeur de la base, le serveur répond cette foutue chaine et moi je me démerde pour la transformer en JSON de manière à ce qu'elle puisse être castée en tableau.

Message cité 1 fois
Message édité par magicien96 le 09-07-2007 à 16:03:07

---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
n°1584152
magicien96
Même pas peur @sato
Posté le 09-07-2007 à 17:22:28  profilanswer
 

Je m'en suis sorti avec ça :'(
 
 

Code :
  1. //Cas des nombres réels : transforme une valeur de type G1.1 en 1.1 tout court
  2.  expGlobale = new RegExp(/(.*'ValidValues'\:\[)(G[0-9].[0-9]+.*)(\].*)/g); //trouve les valeurs réel parmis la string  
  3.  if ( expGlobale.test(str) ) {
  4.   tabs = str.split("{" );
  5.   for( var i=0 ; i<tabs.length ; i++) {
  6.    expGlobale = new RegExp(/(.*'ValidValues'\:\[)(G[0-9].[0-9]+.*)(\].*)/g); //trouve les valeurs réel parmis la string  
  7.    if (expGlobale.test(tabs[i])) {
  8.     expLocale = new RegExp( /G([0-9]+\.[0-9]+)/g );  //motif représentant un nombre réel
  9.     expGlobale.exec(tabs[i]);
  10.     strTemp = RegExp.$3;
  11.     tabs[i] = RegExp.$1 + (RegExp.$2).replace(expLocale, "$1" ) + strTemp;
  12.    }
  13.   }
  14.   str = tabs.join("{" );
  15.  }


---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
n°1584168
cgo2
Dum spiro spero
Posté le 09-07-2007 à 17:34:45  profilanswer
 

magicien96 a écrit :

Tout simplement parceque c'est un logiciel propriétaire et que je ne peux pas avoir accès à sa façon de stocker des données dans sa base :(
 
edit : mon js demande la valeur de la base, le serveur répond cette foutue chaine et moi je me démerde pour la transformer en JSON de manière à ce qu'elle puisse être castée en tableau.


 
Juste par curiosité, c'est prévu pour être utilisé avec quoi ce format ? En interne par le logiciel qui a recodé son propre parser ?


---------------
When it's from Finland it's good.  - Mon blog
n°1584172
magicien96
Même pas peur @sato
Posté le 09-07-2007 à 17:37:49  profilanswer
 

cgo2 a écrit :

Juste par curiosité, c'est prévu pour être utilisé avec quoi ce format ? En interne par le logiciel qui a recodé son propre parser ?


 
C'est bien ça, le logiciel stocke ces données dans une forme proche de JSON mais pas totalement.
Je n'ai pas accès au code vu que c'est un logiciel propriétaire.
Par contre, j'ai accès à sa base de données et donc à ses données sauvées (celles que j'utilise donc...)


---------------
Ils ne savaient pas que c'était impossible, alors ils l'ont fait. ©Mark Twain
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Expression régulière : j'y suis presque mais...

 

Sujets relatifs
expression régulière [nouveau problème][Résolu]expression reguliere et date
Expression "pas uniquement"Aide pour une expression régulière
comparaison avec une expression régulièreExpression régulière particulière
[C] expression presque régulière ;) 
Plus de sujets relatifs à : Expression régulière : j'y suis presque mais...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR