COURS JavaScript


Accueil | Les Objets : l'Objet RegExp

Titre


Généralités

L'objet RegExp (pour Regular Expression : Expression Régulière en français) est un peu particulier. Il ne sert pas à grand chose d'autre que d'effectuer des recherches dans des chaînes de caractères ou d'effectuer des remplacements dans les mêmes chaînes de caractères. Il a une structure très spécifique qu'il faudra absolument respecter si l'on veut que ça marche comme il faut.
Comme tout Objet en JavaScript, il possède des propriétés (pas toujours très intéressantes) et des Méthodes (plus intéressantes) mais surtout, il sert d'argument à d'autres méthodes comme .search() ou .replace() qui appliquées à des Objets de type String (chaînes de caractères) permettent de trouver si une sous-chaîne existe dans une chaîne ou de remplacer une partie d'une chaîne de caractères par une autre.

Plus tard, nous verrons (pour ceux qui en sont fanatiques) que cet objet utilise des tonnes de caractères spéciaux qui lui permettent de faire des recherches parfois extrêmement précises. L'utilité de telles capacités n'est pas toujours évidente, mais puisque ça existe, nous les étudierons plus tard. Pour commencer et comme à mon habitude, je préfères que vous compreniez bien comment il marche sur des exemples simples, puis lorsque vous saurez bien vous en servir, libre à vous d'aller plus loin ou non.

Pour étudier le fonctionnement de cet objet, nous allons prendre comme exemple la capacité qu'il offre de rechercher une sous-chaîne dans une chaîne de caractères.



Structure

Comme je vous l'ai dit plus haut, l'objet RegExp() a une structure bien particulière. Il comprend en fait deux parties précédées chacune par une "/" (slash ou barre oblique en français) :

/motif/drapeau les anglophones disent /pattern/flag (je me suis contenté de traduire par les mots français...)

où :
/motif représente soit la chaîne de caractères recherchée soit une suite de caractères spéciaux qui définiront comment la recherche s'effectue. Dans un premier temps, nous mettrons dans motif, la chaîne de caractères à rechercher. Nous verrons les caractères spéciaux dans une autre leçon.

/drapeau peut prendre plusieurs valeurs qui diront si la recherche s'effectue globalement et/ou si on tient compte de la casse (des majuscules et minuscules) ou non. La partie drapeau pourra prendre les valeurs suivantes :

1) g (la lettre g) pour dire que la recherche s'effectue sur l'intégralité de la chaîne de caractères sans s'arrêter à la première occurrence trouvée. En mettant g dans la partie drapeau, la recherche ira jusqu'au bout de la chaîne de caractères dans laquelle s'effectue la recherche. Elle ne s'arrêtera pas dès qu'elle aura trouvé ce que l'on cherche. On appelle ça une recherche globale (g pour global : globale en français).

2) i (la lettre i) pour dire que l'on ne tient pas compte de la casse (majuscules et minuscules). i est mis pour Ignore Case (Ignorer la casse en français).

3) gi (les lettres g et i). On mettra la combinaison des deux lettres g et i dans la partie drapeau pour indiquer que la recherche se fera sur l'intégralité de la chaîne (recherche globale) et qu'en plus on ne tient pas compte de la casse.

4) rien du tout : ce qui signifiera que la recherche tiendra compte de la casse et qu'en plus elle s'arrêtera dès qu'elle aura trouvé ce que l'on cherche, même si la sous-chaîne recherchée est présente plusieurs fois dans la chaîne de caractères dans laquelle on effectue la recherche.

Pour résumer, on peut dresser le tableau suivant en ce qui concerne la parie drapeau :

contenu de drapeau
Comment s'effectue la recherche :
g
Recherche globale sur toute la chaîne sur laquelle on recherche. On ne s'arrête pas dès qu'on a trouvé. Mais la casse est importante : "philippe" n'est pas pareil que "Philippe";
i
On ne tient pas compte de la casse ; philippe est équivalent à Philippe. Mais la recherche s'arrête dès qu'on a trouvé, même si il y a d'autres sous-chaînes de présentes dans la chaîne dans laquelle on cherche.
gi
On fait une recherche globale sans tenir compte de la casse.
rien du tout
La recherche s'arrête dès que la sous-chaîne est trouvée et la casse est prise en compte. "philippe" est différent de "Philippe" et la recherche s'arrête au premier trouvé. Même s'il y en a d'autre dans la chaîne sur laquelle s'effectue la recherche.

Pour mieux comprendre comment ça marche, nous allons montrer des exemples plus loin. Il faut d'abord apprendre à construire une expression régulière avant de s'en servir. C'est ce que nous allons voir dans le chapitre suivant.



Construction d'un objet RegExp().

Tout d'abord, on ne peut utiliser un objet RegExp() qui si on le passe comme paramètre à une méthode. Nous utiliserons la méthode .search(RegExp) appliquée à une chaîne de caractères pour rechercher une sous-chaîne dans la chaîne principale. Supposons que la chaîne dans laquelle on veut rechercher s'appelle ChainePrincipale et qu'elle contienne "Philippe Médan". Nous aurons donc :

var ChainePrincipale ;
ChainePrincipale = "Philippe Médan" ;

Supposons que dans cette chaîne de caractères, nous voulions voir si la sous-chaîne "Philippe" existe ou non. Voici les données posées. Nous pouvons maintenant nous occuper de notre objet RegExp().

Il y a deux manières de construire un objet RegExp() valable et utilisable. Une simple et une compliquée. Je propose de voir la simple. Nous verrons la compliquée dans une autre leçon. D'accord ? Alors on y va...

Méthode simple :

Simple, mais pas très souple. Mais voyons d'abord. Nous savons appliquer une méthode à un objet de type chaîne de caractères. Il faut écrire :

ChainePrincipale.search() ;

Mais que chercher ? Tout simplement notre expression régulière telle que nous avons appris à la construire plus haut. C'est à dire :

ChainePrincipale.search(/Philippe/gi) ;

Vous reconnaissez tout de suite notre expression régulière : /Philippe/gi/Philippe représente ce que nous avons appelé le motif et /gi le drapeau. En écrivant cela, la sous-chaîne "Philippe" sera cherchée dans la chaîne principale "Philippe Médan" sans tenir compte de la casse.
Si nous n'écrivons que cela, nous ne connaîtrons jamais le résultat de notre recherche. Il faut donc mettre ce résultat dans une variable que nous pouvons appeler par exemple Trouve (pourquoi pas hein ? ). Nous écrirons alors :

var Trouve ;
Trouve = ChainePrincipale.search(/Philippe/gi) ;

Et dans Trouve, nous récupérons la position du premier caractère trouvé lors de la recherche. Ici, 0 puisque nous le savons toutes et tous, une chaîne de caractères est en fait un vecteur dont le premier poste commence à zéro. Voir la leçon sur les chaînes de caractères si vous avez oublié. Pour mémoire je rappelle que la chaîne principale est constituée comme suit :

Index
0
1
2
3
4
5
6
7
8
9
10
11
12
13
Contenu
P
h
i
l
i
p
p
e
 
M
é
d
a
n

Notez bien que comme nous avons indiqué dans le drapeau : /gi , la recherche ne tient pas compte de la casse et si nous avions écrit :

Trouve = ChainePrincipale.search(/philippe/gi) ;

avec un p minuscule à philippe, le résultat aurait été le même.

Dans le cas où la sous-chaîne recherchée n'est pas dans la chaîne principale, la méthode retourne la valeur -1 (moins un). C'est ce qui se produirait si nous avions écrit par exemple :

Trouve = ChainePrincipale.search(/François/gi) ;

Trouve aurait eu la valeur -1 (moins un). Signe que la recherche a échouée. Ce qui est bien pratique, admettons le, pour faire un test sur une recherche.

Voilà. C'est tout. Simple, mais pas très souple puisque avec cette manière d'écrire, la chaîne recherchée est écrite en "dur" dans le programme et pas modifiable facilement. Nous allons maintenant étudier des manières de faire plus souples. Un peu plus complexes, mais infiniment plus intéressantes.

Suite de la leçon.



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.