Le modèle - 1ère partie

Aller en bas

default Le modèle - 1ère partie

Message par Milouze14 le Ven 11 Mai 2018 - 22:14

Le modèle ne représente ni plus ni moins que 95 % de la difficulté dans l'écriture d'une regexp.
On dispose de plusieurs "outils" lors de son écriture.



Ensembles de caractères

Ils sont toujours écrits entre crochets.

Attention :
Un ensemble ne correspondra jamais qu'à une seule occurrence d'un des caractères qu'il contient, peu importe qu'on ait mis 30 caractères dedans, plus d'explication ci-dessous.


Définir un ensemble simple de caractères:
Il est possible  de créer un ensemble de caractères en les plaçant chacun à la suite de l'autre, imaginons que nous cherchions à trouver dans un texte un des caractères suivants h, x, et z alors nous pouvons écrire le modèle suivant :
Code:
[hxz]
Il est intéressant de noter qu'en procédant ainsi, l'ordre des caractères n'a aucune importance du moment que nous n’usons pas du tiret - ou de l’opérateur de négation ^ que nous verrons plus tard ainsi:
Code:
[zhx]
est tout aussi valide.

Un ensemble ne correspondant qu'à une seule occurrence le code suivant:
Code:
var texte="M14 a acheté le dernier zx500";
var regexp=/[zhx]/;
alert(regexp.exec(texte));
ne nous renverra qu'un des caractères (la première occurrence trouvée donc).


Définir une plage de caractères:
Bien, imaginons que nous cherchions à trouver toutes les lettres de la lettre a à la lettre x, ce serait laborieux de devoir toutes les taper c'est pourquoi il est possible de définir une plage de caractères à l'aide du tiret - :
Code:
[a-x]

Simple au possible, mais comment faire si on veut en plus trouver un tiret dans notre texte ?
Code:
[a-x-]
En prenant soin de placer le tiret à une extrémité de sorte qu'aucune plage ne puisse être créée, le tiret perd sa propriété de déclaration d'une plage.

Voyons ça avec un petit exemple:
Code:
var texte="-afxyz0123456789";
var regexp=/[a-x-]/;
alert(regexp.exec(texte));
Magie, le premier caractère trouvé qui correspond à notre ensemble nous est retourné, je te laisse changer le texte afin de bien cerner ça.


La négation d'un ensemble de caractères:

A présent nous allons aborder comment "inverser" la valeur d'un ensemble et pour cela nous allons utiliser l'opérateur de négation ^.
Nous allons chercher à trouver tout ce qui n'est pas un caractère compris entre 2 et 8 compris, là encore c'est assez simple puisqu'il nous suffit de déclarer la plage ainsi:
Code:
[2-8]
et lui ajouter notre négation au début de notre ensemble:
Code:
[^2-8]
et voilà un petit exemple:
Code:
var texte="2345678910gtAz";
var regexp=/[^2-8]/;
alert(regexp.exec(texte));

Attention:
Il existe des combinaisons d'ensembles plus trompeuses:
Code:
[^2-81]
désigne non pas une négation de la plage 2 à 81 mais de plage 2 à 8 à laquelle s'ajoute 1.



Les classes de caractères

Le plus simple lorsqu'on aborde les classes de caractères est de les considérer comme des alias sur des ensembles de caractères ce qui simplifie grandement l'écriture du modèle, voici un exemple:
Code:
var texte="M14 se balade";
var regexp=/\w\d\d/;
alert(regexp.exec(texte));

Bien que nous dit la [Vous devez être inscrit et connecté pour voir ce lien] ?

\wCorrespond à n'importe quel caractère alpha-numérique soit à [A-Za-z0-9_]
\dCorrespond à n'importe quel caractère numérique soit à [0-9]
De fait dans notre regexp notre modèle est:
/\w\d\d/
soit une valeur alpha-numérique, suivie d'une valeur numérique, suivie encore d'une valeur numérique.

La négation d'une classe de caractères se fait en mettant la lettre en majuscule ainsi:
Code:
\D
indique tout caractère non numérique.
avatar
Milouze14
Administrateur
Administrateur

Prénom : Philippe Féminin Date d'inscription : 20/11/2012
Localisation : Vendée
Emploi/loisirs : Informatique
Humeur : Toujours bonne

http://testphpbb3.1fr1.net

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum