COURS JavaScript


Accueil | Les Objets : L'objet RegExp()

Remplacement d'une sous-chaîne par une autre avec l'objet RegExp()

Généralités

Nous avons utilisé l'objet RegExp() pour effectuer des recherches dans des chaînes de caractères. C'est bien, mais on peut faire beaucoup mieux. Nous allons maintenant apprendre à remplacer des sous-chaînes de caractères dans une chaîne principale par une autre sous-chaîne dite chaîne de remplacement..

Nous prendrons comme exemple de chaîne principale :

ChainePrincipale qui contiendra "Philippe Médan et Jean-Philippe" placé dans un vecteur comme suit :

Index
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 29 30
Contenu
P
h
i
l
i
p
p
e
M
é
d
a
n
e
t
J
e
a
n
-
P
h
i
l
i
p p e

Notre expression régulière sera toujours :

ExpressRegul ; // l'objet RegExp() lui même

La chaîne de remplacement sera dans la variable Remplacement. Que nous aurons pris soin de créer en la déclarant en global comme nous savons le faire avec le mot réservé var.

Tout ce qui concerne la construction de l'objet RegExp() se trouve dans les leçons précédentes 1 et 2 . Si vous ne les avez pas étudiées, faites le sans ça vous risquez d'être un peu perdu.



Comment ça marche.

Là encore c'est très simple. Nous allons nous servir de notre expression régulière pour l'utiliser avec une méthode des objets de type String() (chaînes de caractères). Cette méthode, c'est la méthode .replace(). Qui sert justement à remplacer une sous-chaîne de caractères par une autre à l'intérieur d'une chaîne principale. Sa syntaxe est la suivante :

ChainePrincipale.replace(ExpressRegul, Remplacement) ;

Dans la variable ChainePrincipale, nous mettrons (pour notre exemple) "Philippe Médan et Jean-Philippe" en écrivant :

ChainePrincipale = "Philippe Médan et Jean-Philippe"

Nous construirons l'objet ExpressRegul, en y plaçant le motif de la recherche qui sera "Philippe" et la manière de rechercher (le drapeau) qui sera positionné à gi de sorte que la recherche soit globale sans tenir compte de la casse (majuscules et minuscules) en écrivant :

SousChaine = "Philippe" ; // mise en place du motif
drapeau = "gi" ; // recherche globale sans tenir compte de la casse
ExpressRegul = new RegExp(SousChaine, drapeau) ; // construction de l'objet RegExp()

comme nous l'avons appris dans les deux leçons précédentes. Nous avons tout pour commencer à travailler. Alors qu'attendons nous ?



Remplacement de chaînes

Maintenant que tout est en place, il ne nous reste plus qu'à écrire l'instruction qui va faire le travail. Supposons que dans la chaîne principale "Philippe Médan et Jean-Philippe" nous voulions remplacer "Philippe" par "François". J'ai le droit hein ? Alors...

Commençons par remplir la variable Remplacement qui contient la chaîne de remplacement (voir le début de la page). Nous écrirons :

Remplacement = "François" ; // chaîne de remplacement.

Puis reprenons tout simplement la syntaxe de l'instruction :

ChainePrincipale.replace(ExpressRegul, Remplacement) ;

Dans laquelle :

ChainePrincipale est la variable contenant la chaîne principale.
.replace() est la méthode de l'objet de type String() qui permet de faire un remplacement.
ExpressRegul est notre objet expression régulière qui va dire ce que l'on doit remplacer et comment effectuer la recherche dans la chaîne principale.
et enfin Remplacement est la variable qui contient la chaîne qui doit remplacer le motif contenu dans l'objet ExpressRegul.

Pas compliqué hein ? Bien entendu, il faudra toujours mettre tout ça dans une variable destinée à recevoir le résultat de ce remplacement. Dans notre cas, nous avons utilisé Trouve dans les leçons précédentes. Alors continuons. On écrira :

Trouve = ChainePrincipale.replace(ExpressRegul, Remplacement) ;

Dans cet exemple, la chaîne principale :

"Philippe Médan et Jean-Philippe"
deviendra :
"François Médan et Jean-François"

Les deux occurrence de "Philippe" seront remplacées par "François" puisque notre drapeau contient gi. Si nous avions oublié le g pour indiquer que la recherche doit s'arrêter dès qu'une occurrence est trouvée, le résultat serait :

"François Médan et Jean-Philippe"

Vous comprenez mieux maintenant à quoi sert le drapeau dans l'objet RegExp() ? De la même manière, en mettant ou non le i pour tenir compte de la casse ou non, le résultat serait différent, comme nous l'avons vu dans les premières leçons sur ce merveilleux objet RegExp(). Mais je crois qu'un dessin vaut mieux que mille explications. Alors je vous propose d'aller voir un peu plus bas dans cette page pour regarder comment ça fonctionne dans l'exemple interactif que je vous ai concocté. Amusez vous à toutes les combinaisons possibles et voyez ce que ça donne. Comme ça vous réaliserez mieux es possibilités offertes par cet objet.

 



Pour bien comprendre le mécanisme

Dans les champs ci-dessous, remplacez d'abord gi par i tout seul dans le drapeau. Vous verrez comment agit la recherche globale. Avec gi les deux occurrences de "Philippe" seront remplacées par "François" alors qu'avec seulement i ou rien du tout, seule la première occurrence de "Philippe" sera remplacée par "François". Amusez-vous à changer la chaîne principale, la chaîne recherchée, la chaîne de remplacement et le drapeau pour bien vous familiariser avec ce fonctionnement.
Vous pouvez taper à peu près n'importe quoi dans la chaîne recherchée et dans la chaîne de remplacement sauf les caractères :

\ ^ $ * + ? . (anti-slash, accent circonflexe seul, dollar, étoile, signe plus, point d'interrogation et le point tout seul)

car ce sont des caractères spéciaux utilisés par l'objet RegExp() lors de sa construction. Nous les étudierons plus tard. Les utiliser donnerai des résultats pour le moins bizarres ou rien du tout dans le meilleur des cas.

ChainePrincipale (dans laquelle s'effectue la recherche)
SousChaine (motif recherché)
Remplacement (sous-chaîne de remplacement)
drapeau (g, i, gi, ou rien du tout)
Résultat (Trouve)
 

.



Ce cours est enseigné par Philippe Médan 
dans le cadre de la formation des professionnels de l'INTERNET.
au CREFAC , 14 rue Scandicci, 93000 Pantin. Tél. : 01 48 46 51 99
au GITA-GRETA , Lycée Technologique Diderot 61, rue David D'Angers 75019 Paris Tél. : 01 40 40 36 27
au CESI à l'Ecole des ingénieurs, 116 Av Aristide Briand, BP 57, 92224 Bagneux CEDEX Tél. : 01 45 36 70 00
au CFA-AFIA Centre de Formation par l'Apprentissage spécialisé en Informatique DUT Licence MIAGE,
PUIO - Bâtiment 640 - Plateau du Moulon - 91405 Orsay Tél. : 01 69 15 35 19.

© Philippe Médan 1999-2007. Tous droits de reproduction réservés pour tous pays.