Remplacement avec RegExp

Résolu
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009 - 7 mai 2009 à 23:02
XelectroX Messages postés 209 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

32 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
8 mai 2009 à 00:33
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
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
10 mai 2009 à 10:52
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 );
* }
3
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
8 mai 2009 à 10:33
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
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
8 mai 2009 à 10:37
@Bul3 j'ai pas compris ta remarque
Merci d'etre plus explicite
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
8 mai 2009 à 10:47
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 )
@+
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
8 mai 2009 à 11:05
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)
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
8 mai 2009 à 11:19
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 [ ] *  ?  ....
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
8 mai 2009 à 11:21
en plus, je m'adressais à [../auteur/XELECTROX/471771.aspx XelectroX,][../auteur/XELECTROX/471771.aspx ]
[../auteur/XELECTROX/471771.aspx je sais que toi tu sais]
0
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
8 mai 2009 à 21:00
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
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
9 mai 2009 à 09:42
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 ?
0
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
9 mai 2009 à 10:14
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
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
9 mai 2009 à 10:37
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....
0
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
9 mai 2009 à 10:57
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) ?
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
9 mai 2009 à 11:10
la longueur n'est pas nécessairement à utiliser
regarde      indexof
   par exemple 
mais "tout" sur les string aussi   
chez selfHTML
0
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
9 mai 2009 à 11:12
Pas bête
En tout cas, merci pour tout, je vais enfin pouvoir y arriver
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
9 mai 2009 à 11:19
>>je vais enfin pouvoir y arriver
nickel.
0
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
9 mai 2009 à 13:22
Il me dit $0 est indéfini
Est-ce à cause du framework Prototype et de sa fonction $() ?
0
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
9 mai 2009 à 13:26
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
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
9 mai 2009 à 13:30
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.....
0
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
9 mai 2009 à 19:03
Même sans, ca ne va pas , j'y comprends plus rien, est-ce à cause de Firefox ?
0
Rejoignez-nous