Remplacement avec RegExp [Résolu]

Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
- - Dernière réponse : XelectroX
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
- 17 août 2009 à 09:36
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
Afficher la suite 

20/32 réponses

Meilleure réponse
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
22
3
Merci
Salut,

Je ne comprends pas trop la question

Voici un pattern
\[c=#(?<Color1>[0-9A-F]{6})\](?<Texte>.*)\[/c=#(?<Color2>[0-9A-F]{6})\]

Dans Color1 --> 6E5454
Dans Color1 --> D52C2C
Dans Texte --> fdf

Les \[ et \] permet d'inhiber les []
et [0-9A-F]{6} --> 0à9 et AàF (exactement 6 fois)
.* --> n'importe quelle caractere
?<Color1> --> permet de nommer les extractions

Après pour utiliser avec javascript, fait une recherche

Bon dev

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 187 internautes nous ont dit merci ce mois-ci

Commenter la réponse de nhervagault
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
22
3
Merci
Source http://www.bennadel.com/blog/207-Ask-Ben-Extracting-Parts-Of-An-Email-Address-In-Javascript.htm

function GetEmailParts( strEmail ){
// Set up a default structure with null values
// incase our email matching fails.
var objParts = {
user: null,
domain: null,
ext: null
};

// Get the parts of the email address by leveraging
// the String::replace method. Notice that we are
// matching on the whole string using ^...$ notation.
strEmail.replace(
new RegExp( "^(.+)@(.+)\\.(\\w+)$" , "i" ),

// Send the match to the sub-function.
function( $0, $1, $2, $3 ){
objParts.user = $1;
objParts.domain = $2;
objParts.ext = $3;
}
);

* // Return the "potentially" updated parts structure.
* return( objParts );
* }

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 187 internautes nous ont dit merci ce mois-ci

Commenter la réponse de nhervagault
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
Bonjour,
>>par le résultat de la fonction
t'es sur ? ambigüe alors ton exemple !

apres=avant.replace( /ce que tu veux/gi, function($0)
         { $0 c'est l'occurence trouvée
           return ( ce que tu veux );
         }                 );

et [../auteur/NHERVAGAULT/84425.aspx nhervagault]++ il y a des caractères significatifs pour une expression 
                          régulièrecomme [ ] et autres * ? ... ( qui devraient te servir )

Cordialement [mon Site] [M'écrire] Bul
Commenter la réponse de Bul3
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
22
0
Merci
@Bul3 j'ai pas compris ta remarque
Merci d'etre plus explicite
Commenter la réponse de nhervagault
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
euh... la remarque à propos de quoi ?
1° je disais que tu avais raison
   +1 quoi ... ou [../auteur/NHERVAGAULT/84425.aspx nhervagault]++
2° notre questionneur parle du résultat d'une fonction
    et son exemple est ambigüe car pas sûr que cela soit
    nécessaire d'en mettre une ( de fonction )
@+
Commenter la réponse de Bul3
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
22
0
Merci
OK, c'est la phrase suivante qui m'interrogeait ( qui devraient te servir )

Car mon expression réguliere est valide (du moins dans le moteur .NET)
mais les REGEXP sont compatibles sur les différentes plateformes (du moins les regexp de base)
Commenter la réponse de nhervagault
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
ah.. le retour à la ligne intempestif !

il y a des caractères significatifs pour une expression 
régulière comme [ ] et autres * ? ... ( qui devraient te servir )
je parlais des caractères significatifs pour une
    expressions régulière [ ] *  ?  ....
Commenter la réponse de Bul3
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
en plus, je m'adressais à [../auteur/XELECTROX/471771.aspx XelectroX,][../auteur/XELECTROX/471771.aspx ]
[../auteur/XELECTROX/471771.aspx je sais que toi tu sais]
Commenter la réponse de Bul3
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
0
Merci
Donc ca me donnerait :
text=text.replace('\[c=#(?<color1>[0-9A-F]{6})\](?<texte>.*)\[/c=#(?<color2>[0-9A-F]{6})\]
', function($texte, $color1, $color2) );
C'est bien ça

Merci à tous
Commenter la réponse de XelectroX
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
pas tout à fait tu veux le retour d'une fonction
fonction($0) { return (nimporte quoi); }
$0,$1... ce sont les occurences trouvées
exemple :

remplacer les "allo" impairs par "hé" et les pairs par "salut"

    <textarea id="txt">Allo par exemple allo, allo et encore ALLO</textarea>
    <script>
        var nb=0;
        var remp=["hé","salut"];
        document.getElementById("txt").value=
            document.getElementById("txt").value.replace
            (    /allo/gi,
                function($0)
                    { nb++;
                      return (remp[nb%remp.length]);
                    }
            );
    </script>

mais pas bien compris ce que tu cherches à remplacer par quoi ?
Commenter la réponse de Bul3
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
0
Merci
J'ai
quelquechose[c=#6E5454]fdf/c=#D52C2Cquelquechose
et je veux que ca donne
quelquechosefdfquelquechose.

Et ma focntion
degrade('text','6E5454','D52C2C') retourne
fdf

Je dois donc récupérer les informations et les passer en paramètres dans ma fonction
Commenter la réponse de XelectroX
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
je commence à piger...

replace(/\[c=*\]*\/c=*\/gi, function($0)
    { $0 est donc = [c=#123456]fdf/c=#789012 si on prend ton exemple
      avec substring par exemple récupère les 3 zones nécessaires
      var z1=$0.substring(3,6); ....
      var ret= degrade( z2  ,z1 ,  z3 );
      return (  ret  );
   } );

sous réserve que /\[c=*\]*\/c=*\/gi, soit correct et corresponde à ce que tu veux !!?!
     pas testé et pas un spécialiste ( y'a pas qu'là diront beaucoup )
on peut, c'est sûr , améliorer très largement, faire autrement....
Commenter la réponse de Bul3
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
0
Merci
Oui voilà, c'est ca et c'est une bonne idée sauf que comment faire pour connaitre la longueur de ce qui ce trouve à l'intérieur des balises [c=...]/c=... et donc aussi comment connaître le début de z3 (color2) ?
Commenter la réponse de XelectroX
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
la longueur n'est pas nécessairement à utiliser
regarde      indexof
   par exemple 
mais "tout" sur les string aussi   
chez selfHTML
Commenter la réponse de Bul3
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
0
Merci
Pas bête
En tout cas, merci pour tout, je vais enfin pouvoir y arriver
Commenter la réponse de XelectroX
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
>>je vais enfin pouvoir y arriver
nickel.
Commenter la réponse de Bul3
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
0
Merci
Il me dit $0 est indéfini
Est-ce à cause du framework Prototype et de sa fonction $() ?
Commenter la réponse de XelectroX
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
0
Merci
J'ai lu ca aussi :
In JavaScript, the special variable is called
RegExp.$##
(unless you are referencing it in the regular expression itself or handing it as the second argument to the
replace()
method). Since
RegExp
is a global object, you can access
RegExp.$1
,
RegExp.$2
, and so forth, from anywhere in the script. Note that
$1
and
$2
are local variables in Perl.
http://www.webreference.com/js/column5/values.html
Commenter la réponse de XelectroX
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
oulah... s'il y a une bibliothèque de fonctions
( qu'on appelle très pompeusement framework ! )
je passe la main.
connais pas, tiens pas à connaitre, 100ko pour de la "présentation"...
( entr'autres )  je m'en passe.
mais tu dois avoir la bonne piste.....
Commenter la réponse de Bul3
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
0
Merci
Même sans, ca ne va pas , j'y comprends plus rien, est-ce à cause de Firefox ?
Commenter la réponse de XelectroX