Remplacement avec RegExp [Résolu]

Signaler
Messages postés
209
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
-
Messages postés
209
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
-
Bonjour,
Je cherche depuis 1h comment remplacer une string par RegExp :
J'ai une fonction degrade(texte, color1, color2) qui me revois du texte traité.
Et j'aimerai remplacer dans une string, une expression de type [c=#6E5454]fdf/c=#D52C2C par le résultat de la fonction ... (texte=fdf, color1 = 6E5454, color2 = D52C2C)
Mais je ne sais pas comment m'y prendre

Merci de votre aide

32 réponses

Messages postés
209
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009

En fait, le $xx ne fonctionne que dans une chaîne lors du remplacement : par exemple :
var str="Visit Microsoft!";
document.write(str.replace(/(Micro)(soft)/,"$2$1"));
donnera : Visit softMicro
Ma question revient donc , comment dois-je donc m'y prendre
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
c'est quoi tes $1, $2 ????
si c'est ce que trouves le replace
    il faut les mettres dans function aussi, mais comme on ne
       transmet qu'un paramètre ( l'occurence trouvée ) ???
    et... pas entre ", sinon c'est le texte $1, pas le contenu de la variable
( et ) sont significatifs dans une expression régulière
Messages postés
209
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009

$1 c'est Micro car c'est la premiere parenthèse
$2 c'est soft car c'est la 2e parenthèse
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
c'est bien mis dans function(.... ), mais :
pas entre ", sinon c'est le texte $1, pas le contenu de la variable$1
Messages postés
209
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009

Oui, c'est bien le texte $1 (avec guillemets) qui retourne la partie entre parenthèses
Il semblerait que la variable $1 n'existe pas ...
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
je ne sais plus sur quoi tu fais cela....
tu nous remet le nécessaire ?
Messages postés
209
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009

Messages postés
209
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009

Je me suis remis sur le projet et j'ai trouvé une solution :
var RE = /\[c=#([0-9A-Fa-f]{6})\](.*)\[\/c=#([0-9A-Fa-f]{6})\]/;

var res = RE.exec(temp);

temp = temp.replace(res[0], degrade(res[2], res[1], res[3]));

Ca fonctionne bien avec [c=#000000]abc123/c=#FF0000 en entrée mais comment faire pour que ca puisse supporter ca :

[c=#000000]abc123/c=#FF0000[c=#000000]abcdef123456/c=#2C00FF

Il me donne la couleur du tout début, celle de tout à la fin et abc123/c=#FF0000[c=#000000]abcdef123456 comme texte, alors qu'il faudrait que je sépare tout et je suppose passer par une boucle pour les faire 1 à 1.

Parce que là, je bloque encore et je parie que c'est dans la regexp

Donc ma question est comment séparer les différents éléments
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
30
Il te manque le ? (appelé glouton dans les regexp à cette position)

var RE = /\[c=#([0-9A-Fa-f]{6})\](.*?)\[\/c=#([0-9A-Fa-f]{6})\]/;

Re sera normalement une collection de match
apres dans chaque match il faut prendre tes 3 élements.

cf mon source
http://regex.codes-sources.com/codes/UTILISATION-REGEXP-LIRE-FLUX-RSS_49800.aspx

C'est en c# mais ca doit exister en javascript
ce qui semble fait par la fonction split
cf http://www.siteduzero.com/tutoriel-3-8116-l-objet-regexp.html
qui est un bon exemple

N'hesite pas a poster ta solution quand tu auras trouvé.
Messages postés
209
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009

OK, je regarde ca demain
Merci beaucoup
Messages postés
13
Date d'inscription
jeudi 20 août 2009
Statut
Membre
Dernière intervention
24 août 2010

Une fonction simple qui vous sauve la vie :

<script language="javascript">
function RemplaceChaine(stringSource, stringToFind, stringRemplacement){
var text = stringSource.toString() ;
var maReg = new RegExp( stringToFind, "gi") ;
var resultat = text.replace( maReg, stringRemplacement ) ;

if ( text.search( maReg ) == -1 ){
return text ;
}else{
return resultat ;
}
}
</script>


===================================================
BITANG Marcel Yves
bitangm@yahoo.fr
+242 405 50 61
+242 650 46 47
+242 700 02 23
+237 75 17 16 81
+237 75 68 58 22
+237 96 04 18 51
Messages postés
209
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009

Je ne suis plus sur le projet mais je peux tester la fonction plus tard
Merci beaucoup ...