COURS JavaScript


Accueil | Les Objets : L'objet RegExp()

Construction d'un objet RegExp()

Généralités

Nous reprendrons notre exemple de la leçon précédente. A savoir :

ChainePrincipale qui contiendra "Philippe Médan" placé dans un vecteur 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

la variable Trouve, et la sous-chaîne à rechercher sera toujours "Philippe".

Mais au lieu de mettre en "dur" dans le programme l'expression régulière : l'objet RegExp(), nous allons en construire un vrai, un vrai de vrai, avec tout ce que ça comporte. Prêts ? Allons-y...



Construction de l'objet RegExp()

Nous savons comment construire un nouvel objet en JavaScript. Il faut (je le rappelle) utiliser le mot réservé new. Suivi du type de l'objet à créer. C'est ce que nous allons faire. Nous allons d'abord inventer un nom pour ce nouvel objet. Appelons le par exemple ExpressRegul. C'est parlant non ? Puis j'aime bien et comme c'est moi qui décide.... Nous écrirons donc quelque part :

var ExpressRegul ;

Toujours en global, comme d'habitude. Transformons maintenant cette variable en un objet de type RegExp(). Nous devrons écrire alors :

ExpressRegul = new RegExp("motif", "drapeau") ;

en remplaçant bien évidemment motif et drapeau par leurs vraies valeurs, c'est à dire dans notre cas :

ExpressRegul = new RegExp("Philippe", "gi") ;

Notez au passage que cette manière d'écrire nous évite d'avoir à taper les "/" devant motif et drapeau. Par contre n'oubliez pas de séparer motif et drapeau par une "," (virgule). C'est très important !!! Il ne nous reste plus qu'à nous en servir. C'est ça que nous allons faire tout de suite au chapitre suivant, juste en dessous.



Utilisation de l'objet RegExp() créé.

Maintenant que nous possédons un bel objet RegExp() taillé sur mesure, nous n'avons plus qu'à l'utiliser. Il s'appelle ExpressRegul !! Dans l'exercice de la leçon précédente, nous avions écrit :

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

Maintenant, nous pouvons écrire :

Trouve = ChainePrincipale.search(ExpressRegul) ;

Tout simplement. Avouez que c'est quand même plus simple. Et le résultat sera très exactement le même que dans la leçon précédente. Mais... me direz-vous, la chaîne recherchée est toujours en dur dans le programme. On a juste déplacé le problème. C'est vrai. Mais maintenant que nous savons créer de toutes pièces un véritable objet de type RegExp(), nous allons faire encore plus fort. C'est ce que nous allons voir dans le chapitre suivant tout de suite ci-dessous.

 



Passage du mot recherché dans une variable.

Au lieu de mettre la sous-chaîne recherchée en "dur" dans la construction de l'objet RegExp(), nous allons la mettre dans une variable. Disons que cette variable nous l'appellerons tout bonnement SousChaine (voyez, je fais toujours dans la simplicité...). Comme d'ordinaire et ça n'est qu'un rappel, nous déclarerons cette variable en global par :

var SousChaine ;

Nous donnerons comme valeur à cette variable la sous-chaîne à rechercher. Dans notre cas : "Philippe" en écrivant :

SousChaine = "Philippe" ;

Nous pourrons alors construire notre objet de type RegExp() de la manière suivante :

ExpressRegul = new RegExp(SousChaine, "gi") ;

Ce qui donne déjà plus de souplesse puisque nous n'aurons qu'à donner la valeur que nous voulons à la variable SousChaine pour pouvoir rechercher n'importe quoi. Vous voyez l'astuce ? Pour écrire la recherche, rien de changé. Nous écrirons toujours la même chose :

Trouve = ChainePrincipale.search(ExpressRegul) ;

Le résultat sera le même. Mais il y a encore plus fort... Hé oui. Les plus expérimentés d'entre vous commencent déjà à entre apercevoir la solution. Allez voir plus bas au chapitre suivant. Vous m'en direz des nouvelles....

 



Encore plus fort et plus souple

Admettez qu'au lieu d'écrire dans votre programme la valeur de la variable SousChaine, vous demandiez à l'utilisateur de dire lui même ce qu'il veut rechercher. Par l'intermédiaire d'un champ de texte simple dans un formulaire par exemple. Disons que le formulaire s'appellera formulaire et que le champ s'appellera AChercher.

Vous savez déjà comment récupérer ce qu'un utilisateur a saisi dans ce champ de texte et le mettre dans une variable. Mais si... Souvenez-vous... Allez, je vous donne la solution :

SousChaine = document.formulaire.Achercher.value ;

Vous vous souvenez maintenant ? Désormais, la sous-chaîne à rechercher se trouve dans la variable SousChaine et c'est l'utilisateur lui même qui l'a dit... Les instructions de construction de l'objet RegExp() et de recherche sont les mêmes que précédemment, sauf que la sous-chaîne à rechercher peut être différente suivant ce que l'utilisateur voudra rechercher. Votre programme devient donc :

SousChaine = document.formulaire.Achercher.value ; // relève la saisie de l'utilisateur
ExpressRegul = new RegExp(SousChaine, "gi") ; // construction de l'objet RegExp()
Trouve
= ChainePrincipale.search(ExpressRegul) ; // lancement de la recherche

Bien entendu, vous pouvez aussi mettre le drapeau dans une variable, de la même manière par exemple :

var drapeau = "gi" ;

ce qui vous permettra d'écrire :

ExpressRegul = new RegExp(SousChaine, drapeau) ; // construction de l'objet RegExp()

Ce qui est encore plus souple. Pour vous en convaincre et pour que vous puissiez faire tous les tests que vous voulez sur cette expression et son utilisation, vous allez saisir vous même la chaîne dans laquelle il faudra rechercher, le motif et le drapeau dans les champs ci-dessous. En cliquant sur le bouton "Voir le résultat", vous pourrez voir comment tout ça fonctionne en modifiant vous même la chaîne à rechercher, le motif et le drapeau. Faites tout de même attention, car si vous mettez des valeurs pour le drapeau qui ne sont pas l'une des quatre possibilités explorées dans la leçon précédente, vous aurez une erreur JavaScript bloquante. Pour vous éviter ça, je testerai votre saisie dans ce champ et vous dirai de rectifier si ça n'est pas correct. Allez-y, essayez en modifiant ce que vous voulez pour voir comment ça marche.
Les petites curieuses et les petits curieux pourront aller voir dans le code source comment j'ai programmé cette merveille de la technologie moderne. La fonction appelée par le bouton est "Rechercher()". Bon courage.

ChainePrincipale (dans laquelle s'effectue la recherche)
SousChaine (motif)
drapeau (g, i, gi, ou rien du tout)
 

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.