07JavaScript ExpressionsReguliers
07JavaScript ExpressionsReguliers
JavaScript
Les Expressions
Régulières
1
1
Expression régulières
• Une expression régulière est un objet (RegExp)qui
définit un motif (pattern) utilisé pour effectuer des
tests, recherches et remplacement dans les strings.
• Une expression régulière est souvent utilisée pour
valider une entrée de l'utilisateur.
• Pour créer une expression régulière on peut
procéder de deux manières:
• Utiliser la fonction constructeur RegExp
• var patt = new RegExp(pattern)
• Utiliser une constante string délimitée par deux slash
• /pattern/
2
Les expressions régulières sont souvent utilisées
conjointement avec les cinq méthodes ci-dessous:
❑ Méthodes de l'objet String:
❖ match() ; [Link](regexp)
❖ search(); [Link](regexp)
❖ replace() ; [Link](regexp, strR)
❑ Méthodes de l'objet regExp:
❖ exec(); [Link](str)
❖ test(); [Link](str)
3
Objet String : méthode match()
• La méthode match() permet d'obtenir le tableau des correspondances
entre la chaîne courante et une expression régulière.
• La syntaxe est :
➢[Link](regexp)
4
<!DOCTYPE html>
<html> <head>
<title>Les expressions régulières</title>
<meta charset="utf-8">
</head>
<body>
<h1>Expressions régulières et JavaScript</h1>
<p>Lancez-vous dans JavaScript, relancez-vous pour de bon !</p>
<p id="reg"></p>
<script>
var expr = [Link]('p');
var regExp1 = /Lancez/i; //regex avec l'option i
var regExp2 = /Lancez/ig; //regex avec les options i et g
//Recherche avec match()
l> var res1 = [Link](regExp1);
var res2 = [Link](regExp2);
var resultat = [Link]('reg');
[Link] =
'Résultat match() avec regExp1 : ' + res1 +
'<br>Résultat match() sur regExp 2 : ' + res2;
</script>
</body>
</htm 5
Objet String : méthode search()
6
<!DOCTYPE html>
<html> <head>
<title>Les expressions régulières</title>
<meta charset="utf-8">
</head>
<body>
<h1>Expressions régulières et JavaScript</h1>
<p>Lancez-vous dans JavaScript, relancez-vous pour de bon !</p>
<p id="reg"></p>
<script>
var expr = [Link]('p');
var regExp1 = /lancez/i; //regexp avec l'option i
var regExp2 = /lancez/; //regex sans option
var regExp3 = /manger/;
//Recherches avec search()
var res1 = [Link](regExp1);
var res2 = [Link](regExp2);
var res3 = [Link](regExp3);
//Affichage des résultats
var resultat = [Link]('reg');
[Link] =
'Résultat search() sur regex 1 : ' + res1 +
'<br>Résultat search() sur regex 2 : ' + res2 +
'<br> Résultat search() sur regex 3: ' + res3;
</script>
</body>
</html>
7
String : méthode replace()
La méthode replace() permet de rechercher une expression et de la remplacer
par une autre.
La syntaxe est :
[Link](regExp, strR)
8
<!DOCTYPE html>
<html> <head>
<title>Les expressions régulières</title>
<meta charset="utf-8">
</head>
<body>
<h1>Expressions régulières et JavaScript</h1>
<p>Lancez-vous dans JavaScript, lancez-vous pour de bon!</p>
<p id="reg"></p>
<script>
var expr = [Link]('p');
var regExp1 = /z-vous/; //regex sans options
var regExp2 = /z-vous/g; //regExp avec l'option g
//Recherches avec search()
var res1 = [Link](regExp1, 's-toi');
var res2 = [Link](regExp2, 's-toi');
var resultat = [Link]('reg');
[Link] =
'Résultat 1 : ' + res1 +
'<br>Résultat 2 : ' + res2;
</script>
</body>
</html> 9
Objet regExp : méthode test()
La méthode test() cherche une séquence de caractères
dans une chaîne de caractères.
Si la séquence est trouvée, la méthode test() renvoie
la valeur booléenne true. Dans le cas contraire, elle
renvoie false.
La syntaxe est :
[Link](str)
10
<html>
<head>
<title>Les expressions régulières</title>
<meta charset="utf-8">
</head> <body>
<h1>Expressions régulières et JavaScript</h1>
<p>Lancez-vous dans JavaScript, relancez-vous pour de bon !</p>
<p id="reg"></p>
<script>
var rec = [Link]('p').textContent;
var pattern1 = /LANCEZ/; //regExp sans option
var pattern2 = /LANCEZ/i;//regExp avec l'option i
//Recherche avec test()
var res1 = [Link](rec);
var res2 = [Link](rec);
//Affichage des résultats
var resultat = [Link]('reg');
[Link] =
'Résultat 1 : ' + res1 +
'<br>Résultat 2 : ' + res2;
</script>
</body></html>
11
<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<title>Expression réguliere01</title>
</head><body><p id="para1"></p><p id="para2"></p>
<script>
var pat1 = /som/
var pat2 = new RegExp("la");
var d = new Date()
var strDate = [Link]() +"/" + ([Link]()+1) + "/" +
[Link]()
var str1 = "Nous sommes le " + strDate;
[Link]("para1").innerHTML = str1;
var res1 = [Link](str1); //str1 contient t-elle "som"?
var res2 = [Link](str1); //str1 contient t-elle "la"?
var res3 = /\d/.test(str1); //str1 coontient t-elle un chiffre?
var res4 = /^n/[Link](str1); //la chaine commence t-elle par n ou N
[Link]("para2").innerHTML = "res1 : " + res1 +
"<br>res2 : " + res2 +
"<br>res3 : " + res3 +
"<br>res4 : " + res4;
</script></body></html>
12
Objet RegExp : méthode exec()
La syntaxe est :
[Link](str)
Notez que si la séquence est trouvée plusieurs fois dans la chaîne de caractères,
celle-ci ne sera renvoyée qu’une seule fois.
13
<!DOCTYPE html>
<html> <head>
<title>Les expressions régulières</title>
<meta charset="utf-8">
</head>
<body>
<h1>Expressions régulières et JavaScript</h1>
<p>Lancez-vous dans JavaScript, relancez-vous pour de bon !</p>
<p id="reg"></p>
<script>
var str = [Link]('p').textContent;
var pattern1 = /JAVASCRIPT/i;
var pattern2 = /JAVASCRIPT/;
//Recherche avec exec()
var res1 = [Link](str);
var res2 = [Link](str);
var resultat = [Link]('reg');
[Link] = 'Résultat 1 : ' + res1 +
'<br>Résultat 2 : ' + res2;
</script>
</body>
</html> 14
Pattern qui correspondent aux positions dans
une string
Pattern Correspond à
Début de la chaine (utiliser \^ pour faire correspondre au
^
caractère ^)
Fin de la chaine (utiliser \$ pour faire correspondre à la fin
$
de la chaine)
Caractère de mot qui n'est pas suivi ou précédé par un
caractère de mot.
\b
Un caractère de mot est n'importe quelle lettre minuscule(a-
z), majuscule(A-Z), chiffre(0-9) et underscore(_).
Caractère de mot qui est suivi ou précédé par un caractère
\B de mot.
15
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Expression régulière</title>
</head>
<body>
<h1>Pattern qui correspondent aux positions dans une string</h1>
<p>Lancez-vous dans f JavaScript, relancez-vous pour de bon !</p>
<p id="reg"></p>
<script>
var str = [Link]('p').textContent;
var pattern1 = /^L/i;
var pattern2 = /!$/;
var pattern3 = /f\b/;
var pattern4 = /f\B/;
//Recherche avec exec()
var res1 = [Link](str);
var res2 = [Link](str);
var res3 = [Link](str);
var res4 = [Link](str);
var resultat = [Link]('reg');
[Link] = 'Résultat 1 : ' + res1 +
'<br>Résultat 2 : ' + res2 +
'<br>Résultat 3 : ' + res3 +
'<br>Résultat 4 : ' + res4;
</script>
</body></html> 16
Les quantifieurs
• Les quantifieurs permettent de dire combien de fois un caractère doit
être recherché.
Quantifier Description
c+ N'importe quelle string qui contient au moins une fois c
(un ou plusieurs ={1,})
c* N'importe quelle string qui contient zero ou plusieurs
occurrences de c{0,}
c? N'importe quelle string qui contient 0 ou 1 occurrence de c
c{n} N'importe quelle string qui contient une sequence de n c
c{n,m} N'importe quelle string qui contient une séquence de n à m c
c{n,} N'importe quelle string qui contient une séquence d'au moins
n c.
?=s N'importe quelle string suivie par une string spécifique s
?!s N'importe quelle string qui n'est pas suivie par une string
spécifique s
17
Quantifieurs : exemple1 d'utilisation
<!DOCTYPE html>
<html>
<head>
<title>Les expressions régulières</title>
<meta charset="utf-8">
</head>
<body>
<h1>Expressions régulières et JavaScript</h1>
<p>On apprend à utiliser les regex en JavaScript</p>
<p id="reg"></p>
<script>
//On accède au texte de notre paragraphe
var rec = [Link]('p').textContent;
//On veut savoir si notre paragraphe contient un "x"
var r1 = /x+/;
var res1 = [Link](rec);
21
L’option i nous permet de ne pas tenir compte de
la casse dans notre regex, ou plutôt d’accepter
toutes les combinaisons minuscules / majuscules
représentant la séquence de notre regex.
L’option g sert à exécuter des recherches globales :
plutôt que de s’arrêter au premier résultat trouvé,
on va chercher tous les résultats disponibles.
22
L’option m permet d’effectuer la recherche sur
plusieurs lignes.
Plus précisément, l'option m considére chaque
retour à la ligne comme la fin d’une ligne et le
début d’une autre ligne.
L’option m est généralement utilisée avec les
quantifieurs ^ et $ qui vont alors considérer
chaque retour à la ligne comme la fin d’une
première chaîne et le début d’une autre.
23
<!DOCTYPE html>
<html>
<head>
<title>Les expressions régulières</title>
<meta charset="utf-8">
</head>
<body>
<h1>Expressions régulières et JavaScript</h1>
<p>On apprend à utiliser les regex en JavaScript</p>
<p id="reg"></p>
<script>
//On accède au texte de notre paragraphe
var rec = [Link]('p').textContent;
var rec2 = 'Je suis sur \ndeux lignes en Js'
//On cherche si une ligne commence par "d" (avec m) dans rec2
var r4 = /^d/m;
var res4 = [Link](rec2);
25
LES CLASSES DE CARACTERES
Les classes de caractères permettent de spécifier des plages de caractères pour effectuer
nos recherches. Pour déclarer une classe de caractères, nous utilisons une paire de
crochets [], ou dans des cas particuliers des parenthèses.
Le tableau ci-dessous montre quelques exemples de classes de caractères
CLASSE Signification
Trouve n’importe quel caractère qui n’est pas une lettre minuscule de
[^a-z]
l’alphabet
[^0-9] Trouve n’importe quel caractère qui n’est pas un nombre compris entre 0 et 9
27
<!DOCTYPE html>
<html> <head>
<title>Les expressions régulières</title>
<meta charset="utf-8"> </head>
<body>
<h1>Expressions régulières et JavaScript</h1>
<p>On apprend à utiliser les regex en JavaScript</p>
<p id="reg"></p>
<script>
//On accède au texte de notre paragraphe
var rec = [Link]('p').textContent;
//On cherche "aeiouy"
var r1 = /aeiouy/g;
var res1 = [Link](r1);
//On cherche tous les 'a', 'e', 'i', 'o', 'u' et 'y'
var r2 = /[aeiouy]/g;
var res2 = [Link](r2);
var resultat = [Link]('reg');
[Link] =
'Recherche sans classe : ' + res1 +
'<br>Recherche avec classe : ' + res2;
</script>
</body></html>
28
Les classes : Exemple 2
<!DOCTYPE html>
<html> <head>
<title>Les expressions régulières</title>
<meta charset="utf-8">
</head>
<body>
<h1>Expressions régulières et JavaScript</h1>
<p>On apprend à utiliser les regex en JavaScript en 2015</p>
<p id="reg"></p>
<script>
//On accède au texte de notre paragraphe
var rec = [Link]('p').textContent;
<body>
<h1>Expressions régulières et JavaScript</h1>
<p>On apprend à utiliser les [regex] en JavaScript en
2019</p>
<p id="reg"></p>
<script>
//On accède au texte de notre paragraphe
var rec = [Link]('p').textContent;
32
recherche de caractères spéciaux
introduire un caractère spéciale dans un pattern
(utiliser le backaslash(\))
Beaucoup de caractères spéciaux parenthèses, crochets, slashs, symbole dollar ou tréma,
etc.) sont utilisés par les regex et possèdent une signification précise. Pour rechercher ce
genre de caractères, vous devrez les échapper avec un antislash.
Pattern Correspond à
\\ Caractère backslash (\)
\/ Caractère slash(/)
\t Caractère tabulation
\n Caractère nouvelle ligne
\r Caractère retour chariot
\f Caractère Form Feed
[\b] Caractère backslash. Le seul caractère qui doit être placé
entre crochets
\udddd Caractère unicode dont le code est spécifié en hexa
\xdd Équivalent à \u00dd : caractère dont le code unicode <=255
33
Recherche des caractères spéciaux : Exemple de programme
<!DOCTYPE html>
<html>
<head>
<title>Les expressions régulières</title>
<meta charset="utf-8">
</head>
<body>
<h1>Expressions régulières et JavaScript</h1>
<p>On apprend à utiliser les [regex] en 2-0-2-2 ?</p>
<p id="reg"></p>
<script>
//On accède au texte de notre paragraphe
var rec = [Link]('p').textContent;
34
//On cherche "[" et "]" et "e" en créant une classe
var r2 = /[e\[\]]/g;
var res2 = [Link](r2);
36
META
CARACTERE
SIGNIFICATION
<body>
<h1>Expressions régulières et JavaScript</h1>
<p>On apprend à utiliser les regex en 2015</p>
<p id="reg"></p>
<script>
//On accède au texte de notre paragraphe
var rec = [Link]('p').textContent;
39
Regroupement et Alternatives
Symbole Description
() Regroupe des caractères pour être cherché comme un tout. Il ya
possibilité d'imbrication
() Outre le regroupement de caractères (voir ci-dessus), les
parenthèses servent également à capturer le sous-motif souhaité
dans un motif. Les valeurs des sous-motifs peuvent ensuite être
récupérées à l'aide de RegExp. $ 1, RegExp. $ 2, etc. une fois que
le motif lui-même est mis en correspondance ou comparé.
Par exemple, ce qui suit correspond à «2 chapitres» dans «Nous
lisons 2 chapitres en 3 jours», et isole en outre la valeur «2»:
var mystring = "Nous lisons 2 chapitres en 3 jours"
var aiguille = / (\ d +) chapitres /
[Link] (aiguille) // correspond à "2 chapitres"
alert(RegExp. $ 1) // affiche le sous-motif capturées, ou "2 "
Le sous-motif peut également être référencé ultérieurement
dans le motif principal.
40
Regroupement et Alternatives
Symbole Description
(?:x) Correspond à x mais ne le capture pas. En d'autres termes,
aucune référence numérotée n'est créée pour les éléments
entre parenthèses.
x(?=y) Lookahead positif: correspond à x uniquement s'il est suivi de
y. Notez que y n'est pas inclus dans le match, agissant
uniquement comme une condition requise.
x(?!y) Lookahead négatif: correspond à x uniquement s'il n'est PAS
suivi de y. Notez que y n'est pas inclus dans le match, agissant
uniquement comme une condition requise.
| L'alternance combine les clauses en une seule expression
régulière, puis correspond à l'une des clauses individuelles.
Similaire à l'instruction "OR".
41
Regroupement et Alternatives
Symbole Exemple
() /(abc)+(def)/ correspond à une ou plusieurs occurrences de
"abc" suivies d'une occurrence de "def".
() Ce qui suit trouve le texte «Moha Najib» et échange leurs
positions, il devient donc «Najib Moha»:
“Moha Najib".replace(/(Najib) (Moha)/, "$2 $1")
(?:x) /(?:.d){2}/ matches but doesn't capture "cdad".
42
43
Références arrière
Symbole Description
( )\n "\n" (where n is a number from 1 to 9) when added to the end of a regular
expression pattern allows you to back reference a subpattern within the
pattern, so the value of the subpattern is remembered and used as part of
the matching . A subpattern is created by surrounding it with parenthesis
within the pattern. Think of "\n" as a dynamic variable that is replaced with
the value of the subpattern it references. For example:/(hubba)\1/
is equivalent to the pattern /hubbahubba/, as "\1" is replaced with the
value of the first subpattern within the pattern, or (hubba), to form the
final pattern.
Lets say you want to match any word that occurs twice in a row, such as
"hubba hubba." The expression to use would be:
/(\w+)\s+\1/
"\1" is replaced with the value of the first subpattern's match to essentially
mean "match any word, followed by a space, followed by the same word
again".
If there were more than one set of parentheses in the pattern string you
would use \2 or \3 to match the desired subpattern based on the order of
the left parenthesis for that subpattern. In the example:
/(a (b (c)))/
"\1" references (a (b (c))), "\2" references (b (c)), and "\3" references (c).
44
Method Description Example
[Link](regular Searches and replaces the regular expression var oldstring="(304)434-5454"
expression, replacement portion (match) with the replaced text newstring=[Link](/[\(\)-
text) instead. For the "replacement text" ]/g, "")
parameter, you can use the keywords $1 to //returns "3044345454" (removes
$99 to replace the original text with values "(", ")", and "-")
from subpatterns defined within the main
[Link] following finds the text "John
Doe" and swaps their positions, so it
becomes "Doe John":
var newname="John
Doe".replace(/(John) (Doe)/,
"$2 $1")
The following characters carry special
meaning inside "replacement text":
•$1 to $99: References the submatched
substrings inside parenthesized expressions
within the regular expression. With it you can
capture the result of a match and use it
within the replacement text.
•$&: References the entire substring that
matched the regular expression
•$`: References the text that proceeds the
matched substring
•$': References the text that follows the
matched substring
•$$: A literal dollar sign
The "replacement text" parameter can also
be substituted with a callback function
instead. See example below.
45
Méthode Description Example
[Link](regular Executes a search for a var oldstring="Peter has 8
expression) match within a string based dollars and Jane has 15"
on a regular expression. It newstring=[Link]
returns an array of h(/\d+/g)
information or null if no //returns the array
match is [Link]: Also ["8","15"]
updates the $1…$9
properties in the RegExp
object.
[Link](string) Similar to [Link]() var match =
above in that it returns an /s(amp)le/[Link]("Sample
array of information or null text")
if no match is found. Unlike //returns
[Link]() however, the ["Sample","amp"]
parameter entered should
be a string, not a regular
expression pattern.
46
Method Description
[Link] (string literal or Breaks up a string into an array of substrings
regular expression) based on a regular expression or fixed string.
[Link](regular Tests for a match in a string. It returns the index
expression) of the match, or -1 if not found. Does NOT
support global searches (ie: "g" flag not
supported).
[Link](string) Tests if the given string matches the Regexp,
and returns true if matching, false if not.
47
Method Example
[Link](regular expression) var oldstring="Peter has 8 dollars and Jane has 15"
newstring=[Link](/\d+/g)
//returns the array ["8","15"]
[Link](string) var match = /s(amp)le/[Link]("Sample text")
//returns ["Sample","amp"]
[Link](regular expression, var oldstring="(304)434-5454"
replacement text) newstring=[Link](/[\(\)-]/g, "")
//returns "3044345454" (removes "(", ")", and "-")
[Link] (string literal or regular var oldstring="1,2, 3, 4, 5"
expression) newstring=[Link](/\s*,\s*/)
//returns the array ["1","2","3","4","5"]
[Link](regular expression) "Amy and George".search(/george/i)
//returns 8
[Link](string) var pattern=/george/i
[Link]("Amy and George")
//retuns true
48
Example- Replace "<", ">", "&" and quotes (" and ') with the equivalent HTML entity
instead
function html2entities(sometext){
var re=/[(<>"'&]/g
arguments[i].value=[Link](re, function(m){return
replacechar(m)})
}
function replacechar(match){
if (match=="<")
return "<"
else if (match==">")
return ">"
else if (match=="\"")
return """
else if (match=="'")
return "'"
else if (match=="&")
return "&"
}
49