Javascript - L'objet RegExp
Les particularités de l'objet RegExp
L'objet RegExp est un objet permettant de manipuler des expressions
régulières, c'est-à-dire
des modèles créés à l'aide de caractères ASCII permettant de manipuler
des chaînes de caractères,
afin de trouver des portions de la chaîne correspondant au modèle.
La création d'un objet RegExp se crée à l'aide
d'une simple expression comme suit :
Expression = /motif/drapeau
Il est également possible de créer un tel objet de manière
plus classique à l'aide de son constructeur :
Expression = new RegExp("motif","drapeau")
Le motif représente l'expression régulière en elle-même
tandis que le drapeau (optionnel) permet de préciser le comportement de l'expression régulière :
- g indique une recherche globale sur la chaîne de caractère et indique une recherche de toutes les occurences.
- i indique une recherche non sensible à la casse, c'est-à-dire que la recherche se fait indépendamment
de l'écriture en majuscule ou minuscule de la chaîne.
- gi combine les deux comportements précédents.
Construire une expression régulière
Les expressions régulières permettent de rechercher des occurrences (c'est-à-dire une suite
de caractères correspondant à ce que l'on recherche) grâce à une série de caractères spéciaux. L'expression régulière en elle-même est donc
une chaîne de caractère contenant des caractères spéciaux et des caractères standards.
|
Pour rechercher un caractère faisant partie des caractères spéciaux, il suffit de
le faire précéder d'un antislash (sauf entre crochets) :
Caractère spécial |
Echappement |
\ |
\\ |
. |
\. |
$ |
\$ |
[ |
\[ |
] |
\] |
( |
\( |
) |
\) |
{ |
\{ |
} |
\} |
^ |
\^ |
? |
\? |
* |
\* |
+ |
\+ |
- |
\- |
|
Début et fin de chaîne
Les symboles ^ et $ indiquent respectivement le début et
la fin d'une chaîne, et permettent donc de la délimiter.
"^debut": chaîne qui commence par "debut"
"fin$": chaîne qui se termine par "fin"
"^chaîne$": chaîne qui commence et se termine par "chaîne"
"abc": chaîne contenant la chaîne "abc"
Nombre d'occurences
Les symboles *, + et ?, signifient respectivement "zéro ou plusieurs",
"au moins un", "un ou aucun", et permettent de donner une notion de quantité.
"abc+": chaîne qui contient "ab" suivie de un ou plusieurs "c" ("abc", "abcc", etc.)
"abc*": chaîne qui contient "ab" suivie de zéro ou plusieurs "c" ("ab", "abc", etc.)
"abc?": chaîne qui contient "ab" suivie de zéro ou un "c" ("ab" ou "abc" uniquement)
"^abc+": chaîne commençant par "ab" suivie de un ou plusieurs "c" ("abc", "abcc", etc.)
Les accolades {X,Y} permettent de donner des limites précises de nombre d'occurences.
"abc{2}": chaîne qui contient "ab" suivie de deux "c" ("abcc")
"abc{2,}": chaîne qui contient "ab" suivie de deux "c" ou plus ("abcc" etc..)
"abc{2,4}": chaîne qui contient "ab" suivie 2, 3 ou 4 "c" ("abcc" .. "abcccc")
Il est à noter que le premier nombre de la limite est obligatoire ("{0,2}", mais pas
"{,2}").
Les symboles vu précedemment ('*', '+', et
'?') sont équivalents à "{0,}", "{1,}", et "{0,1}".
Parenthèses capturantes
Les parenthèses ( ) permettent de représenter une séquence de caractères
et de capturer le résultat. Les occurences correspondant au motif entre parenthèses
sont accessibles via la méthode exec() de l'objet RegExp ou bien les méthodes
search(), match() et replace() de l'objet String.
"a(bc)+": chaîne qui contient "a" suivie de au moins
une occurence de la chaîne "bc"
La barre verticale | se comporte en tant qu'opérateur OU
"(un|le)": chaîne qui contient "un" ou "le"
"(un|le) chien": chaîne qui correspond à
"un chien" ou "le chien"
"commentcamarche\.((net)|(com)|(org))":
chaîne qui correspond à :
"commentcamarche.net"
"commentcamarche.com"
"commentcamarche.org"
Caractère quelconque
Le point (.) indique n'importe une occurence de n'importe quel caractère.
"^.{3}$": chaîne qui contient 3 caractères
".*": Tous les caractères
Liste de caractères
Les crochets [ ] définissent une liste de caractères autorisés
(ou interdits). Le signe - permet quand à lui de définir un intervalle.
Le caractère ^ après le premier crochet indique quand à lui une interdiction.
"[abc]": chaîne qui contient un "a", un "b", ou un "c".
"[a-z]": chaîne qui contient un caractère compris entre "a" et "z".
"[^a-zA-Z]": chaîne qui ne commence pas par une lettre.
En effet entre crochets, chaque caractère représente
ce qu'il est. Pour représenter un ] il faut le mettre en premier (ou
après un ^ si c'est une interdiction).
Etant donné que le signe
- sert à définir un intervalle, il est nécessaire
de commencer ou de terminer par ce caractère lorsque l'on veut indiquer qu'il fait partie des caractères
autorisés :
"[-ag]": chaîne qui contient un moins (-), un "a", ou un "g"
"[a-g]": chaîne qui contient un caractère compris entre "a" et "g"
"[\+?{}.]": chaîne qui contient un de ces six caractères
"[]-]": chaîne qui contient le caractère "]" ou le caractère "-"
Caractères spéciaux
Il existe enfin des caractères spéciaux (précédés d'une
barre oblique inverse) représentant des types de caractères spécifiques :
Caractère spécial |
Utilité |
\b |
Permet de capturer une coupure de mot,
c'est-à-dire des caractères situés au tout début ou à la fin d'un mot.
Par exemple "he\b" permet de capturer "CommentCaMarche" mais pas "chenil".
De la même façon "\bCo" permet de capturer "CommentCaMarche" mais pas
"DéCor". |
\B |
Permet de capturer les caractères non précédés
ou suivis d'une coupure de mot,
c'est-à-dire des caractères situés au milieu d'un mot.
Par exemple "ment\B" permet de capturer "CommentCaMarche" mais pas "Comment Ca Marche". |
\cCaractère |
Permet de capturer un caractère de contrôle
(correspondant à la combinaison Ctrl+Caractère.
Par exemple "\cC" permet de capturer la séquence Ctrl+c. |
\d |
Permet de capturer un caractère numérique.
\d est ainsi équivalent à [0-9]. |
\f |
Permet de capturer un saut de page. |
\n |
Permet de capturer un saut de ligne. |
\r |
Permet de capturer un retour chariot. |
\s |
Permet de capturer un "caractère blanc"
(espace, retour chariot, tabulation, saut de ligne, saut de page). |
\S |
Permet de capturer un "caractère non blanc"
(tous les caractères sauf espace, retour chariot, tabulation, saut de ligne, saut de page). |
\t |
Permet de capturer une tabulation horizontale. |
\v |
Permet de capturer une tabulation verticale. |
\w |
Permet de capturer un caractère alphanumérique (y compris
le caractère _).
\w est ainsi équivalent à [a-zA-Z0-9_]. |
\w |
Permet de capturer un caractère non alphanumérique.
\W est ainsi équivalent à [^a-zA-Z0-9_]. |
\oNombre |
Permet de capturer un nombre en base octale (base 8). |
\xNombre |
Permet de capturer un nombre en base hexadécimale (base 16). |
Tableau récapitulatif
Voici un tableau récapitulatif des caractères spéciaux utilisés dans les expressions régulières :
Caractère |
Utilité |
\ |
Le caractère antislash représente lui-même ou le caractère spécial
qui le suit. |
[] |
Les crochets définissent une liste de caractères. |
() |
Les parenthèses définissent un élément composé de l'expression régulière qu'elle contient. |
{} |
Les accolades lorsqu'elles contiennent un ou plusieurs chiffres séparés par des virgules
représentent le nombre d'occurences de l'élément les précédant
(par exemple p{2,5} correspond à ppp, pppp ou ppppp |
- |
Un moins entre deux caractères dans une liste représente un intervalle
(par exemple [a-d] représente [abcd]). |
. |
Le caractère point représente un caractère quelconque. |
* |
Le caractère astérisque indique un nombre d'occurences indéterminé (y compris aucune)
de l'élément le précédant. |
+ |
Le caractère plus indique une ou plusieurs occurences de l'élément le précédant. |
? |
Le caractère "point d'interrogation" indique une occurence éventuelle
(0 ou 1) de l'élément le précédant. |
| |
La barre verticale signifie l'occurrence de l'élément situé à sa gauche ou de celui
situé à sa droite (lard|cochon) |
^ |
- Placé en début d'expression il signifie "chaîne commençant par .. "
- Utilisé entre crochet, immédiatement après le crochet ouvrant,
il signifie "ne contenant pas les caractères suivants...
|
[abc] |
Permet de rechercher les caractères compris entre les crochets. |
[^abc] |
Permet de rechercher tous les caractères sauf ceux compris entre les crochets. |
$ |
Placé en fin d'expression il signifie "chaîne finissant par ... " |
Les propriétés de l'objet RegExp
Le résultat d'une expression régulière est stockée dans l'objet RegExp.
Les propriétés de l'objet RegExp contiennent des chaînes correspondant à
la dernière occurence trouvée.
La syntaxe pour manipuler ces données est la suivante :
RegExp.propriété
Propriété |
Description |
$_ |
Propriété correspondant à la propriété input. |
$* |
Propriété correspondant à la propriété multiline. |
$& |
Propriété correspondant à la propriété LastMatch. |
$+ |
Propriété correspondant à la propriété LastParen. |
$` |
Propriété correspondant à la propriété LeftContext. |
$' |
Propriété correspondant à la propriété RightContext. |
global |
Propriété booléenne indiquant si la recherche est globale (true) ou non (false). |
ignoreCase |
Propriété booléenne indiquant si la recherche est sensible à la casse (true) ou non (false). |
input |
Indique la chaîne d'entrée sur laquelle la recherche est réalisée. |
lastIndex |
Indique la position à laquelle la recherche suivante va se faire. |
lastMatch |
Contient la dernière occurence trouvée. |
lastParen |
Contient la dernière occurence correspondant à un motif entre parenthèses. |
leftContext |
Contient la chaîne situé à gauche de l'occurence trouvée. |
multiline |
Propriété booléenne indiquant si la recherche porte sur plusieurs lignes (true) ou non (false). |
rightContext |
Contient la chaîne situé à droite de l'occurence trouvée. |
source |
Contient le motif de l'expression régulière. |
Les méthodes de l'objet RegExp
Les méthodes de l'objet RegExp permettent d'appliquer
l'expression régulière à une chaîne de caractères.
Le tableau suivant décrit les méthodes de l'objet RegExp :
Méthode |
Description |
Expression.compile("chaine"); |
Permet de redéfinir une nouvelle expression régulière. |
Expression.exec("chaine"); |
Effectue une recherche sur la chaîne de caractère avec l'expression régulière
définie.
Cette méthode retourne un tableau contenant les occurences trouvées. |
Expression.test("chaine"); |
Teste une chaîne de caractère avec l'expression régulière.
Cette méthode retourne True si la recherche est fructueuse, false dans
le cas contraire. |
Trucs & astuces pertinents trouvés dans la base de connaissances
Discussions pertinentes trouvées dans le forum