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

Expression régulière : j'y suis presque mais... - HTML/CSS - Programmation

Marsh Posté le 05-07-2007 à 16:29:31    

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
Reply

Marsh Posté le 05-07-2007 à 16:29:31   

Reply

Marsh Posté le 09-07-2007 à 11:49:00    

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
Reply

Marsh Posté le 09-07-2007 à 12:57:16    

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

Reply

Marsh Posté le 09-07-2007 à 13:08:54    

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
Reply

Marsh Posté le 09-07-2007 à 13:14:22    

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

Reply

Marsh Posté le 09-07-2007 à 13:17:37    

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" );

Reply

Marsh Posté le 09-07-2007 à 13:18:45    

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


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 09-07-2007 à 13:22:07    

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
Reply

Marsh Posté le 09-07-2007 à 13:24:41    

et "ValidValues" il apparait en plusieurs exemplaires ?


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 09-07-2007 à 13:25:32    

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
Reply

Marsh Posté le 09-07-2007 à 13:25:32   

Reply

Marsh Posté le 09-07-2007 à 13:28:07    

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
Reply

Marsh Posté le 09-07-2007 à 13:30:41    

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


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 09-07-2007 à 13:31:52    

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
Reply

Marsh Posté le 09-07-2007 à 14:01:54    

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
Reply

Marsh Posté le 09-07-2007 à 14:05:09    

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
Reply

Marsh Posté le 09-07-2007 à 14:13:30    

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

Reply

Marsh Posté le 09-07-2007 à 14:17:28    

exactement


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 09-07-2007 à 14:22:25    

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
Reply

Marsh Posté le 09-07-2007 à 15:57:17    

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.

Reply

Marsh Posté le 09-07-2007 à 16:01:14    

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
Reply

Marsh Posté le 09-07-2007 à 17:22:28    

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
Reply

Marsh Posté le 09-07-2007 à 17:34:45    

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
Reply

Marsh Posté le 09-07-2007 à 17:37:49    

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
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed