Skip to content

Commit e869d98

Browse files
committed
re-reading
1 parent 6758619 commit e869d98

File tree

1 file changed

+19
-19
lines changed
  • 9-regular-expressions/08-regexp-character-sets-and-ranges

1 file changed

+19
-19
lines changed

9-regular-expressions/08-regexp-character-sets-and-ranges/article.md

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# Ensembles et intervalles [...]
22

3-
Plusieurs caractères ou classes de caractères, entourés de crochets `[…]` signifie "chercher un caractère parmi ceux-là".
3+
Plusieurs caractères ou classes de caractères, entourés de crochets `[…]` signifient "chercher un caractère parmi ceux-là".
44

55
## Ensembles
66

77
Par exemple, `pattern:[eao]` signifie un caractère qui est soit `'a'`, `'e'`, ou `'o'`.
88

9-
Ceci est appelé un *ensemble*. Les ensembles peuvent être combinés avec d'autres caractères dans une expression rationnelle :
9+
On appelle cela un *ensemble*. Les ensembles peuvent être combinés avec d'autres caractères dans une même expression rationnelle :
1010

1111
```js run
1212
// trouve [t ou m], puis "op"
@@ -22,7 +22,7 @@ L'exemple suivant ne donne donc aucun résultat :
2222
alert( "Voila".match(/V[oi]la/) ); // null, pas de correspondance
2323
```
2424

25-
Le modèle recherche :
25+
L'expression rationnelle recherche :
2626

2727
- `pattern:V`,
2828
- puis *une* des lettres `pattern:[oi]`,
@@ -32,17 +32,17 @@ Ce qui correspondrait à `match:Vola` ou `match:Vila`.
3232

3333
## Intervalles
3434

35-
Les crochets peuvent aussi contenir de *intervalles de caractères*.
35+
Les crochets peuvent aussi contenir des *intervalles de caractères*.
3636

37-
Par exemple, `pattern:[a-z]` est un caractère pouvant aller de `a` à `z`, et `pattern:[0-5]` est un nombre pouvant valoir de `0` jusqu'à `5`.
37+
Par exemple, `pattern:[a-z]` est un caractère pouvant aller de `a` à `z`, et `pattern:[0-5]` est un chiffre allant de `0` à `5`.
3838

3939
Dans l'exemple ci-dessous nous recherchons un `"x"` suivi par deux chiffres ou lettres de `A` à `F`:
4040

4141
```js run
4242
alert( "Exception 0xAF".match(/x[0-9A-F][0-9A-F]/g) ); // xAF
4343
```
4444

45-
Ici `pattern:[0-9A-F]` comporte deux intervalles : il recherche un caractère qui est soit chiffre entre `0` et `9` compris ou bien une lettre entre `A` et `F` compris.
45+
Ici `pattern:[0-9A-F]` comporte deux intervalles : il recherche un caractère qui est soit chiffre entre `0` et `9` compris ou bien une lettre entre `A` et `F` comprise.
4646

4747
Si nous voulons y inclure les lettres minuscules, nous pouvons ajouter l'intervalle `a-f`: `pattern:[0-9A-Fa-f]`. Ou bien ajouter le marqueur `pattern:i`.
4848

@@ -64,9 +64,9 @@ Par exemple:
6464

6565
Comme la classe de caractères `pattern:\w` est un raccourcis pour `pattern:[a-zA-Z0-9_]`, il ne peut pas trouver les idéogrammes chinois, ni les lettres cyrilliques, etc.
6666

67-
Nous pouvons écrire un modèle plus universel, qui cherche le caractère d'un mot quelle que soit la langue. On obtient facilement grâce aux propriétés Unicode : `pattern:[\p{Alpha}\p{M}\p{Nd}\p{Pc}\p{Join_C}]`.
67+
Nous pouvons écrire un modèle plus universel, pour rechercher le caractère d'un mot quelle que soit la langue. Grâce aux propriétés Unicode, on obtient facilement : `pattern:[\p{Alpha}\p{M}\p{Nd}\p{Pc}\p{Join_C}]`.
6868

69-
Déchiffrons cela. De la même manière que `pattern:\w`, nous construisons notre propre ensemble qui contient les caractères qui portent les propriétés Unicode :
69+
Déchiffrons cela. Tout comme `pattern:\w`, nous construisons notre propre ensemble qui contient les caractères qui portent les propriétés Unicode :
7070

7171
- `Alphabetic` (`Alpha`) - pour les lettres,
7272
- `Mark` (`M`) - pour les accents,
@@ -85,7 +85,7 @@ let str = `Hi 你好 12`;
8585
alert( str.match(regexp) ); // H,i,你,好,1,2
8686
```
8787

88-
Bien sûr, nous pouvons modifier cet ensemble : ajouter ou retirer des propriétés Unicode. Plus de détail sur ces propriétés Unicode dans l'article <info:regexp-unicode>.
88+
Cet ensemble est bien sûr encore modifiable : on peut y ajouter ou retirer des propriétés Unicode. Plus de détail sur ces propriétés Unicode dans l'article <info:regexp-unicode>.
8989

9090
```warn header="Les propriétés Unicode ne sont pas supportées par IE"
9191
Les propriétés Unicode `pattern:p{…}` ne sont pas implémentées dans IE. Si nous en avons vraiment besoin, nous pouvons utiliser la librairie [XRegExp](http://xregexp.com/).
@@ -95,15 +95,15 @@ Ou simplement utiliser des intervalles de caractères dans la langue qui nous in
9595

9696
## Intervalles d'exclusion
9797

98-
En plus des intervalles classiques, existent les intervalles d'exclusion qui ressemblent à `pattern:[^…]`.
98+
En plus des intervalles classiques, il existe des intervalles d'exclusion de la forme `pattern:[^…]`.
9999

100-
Ils se distinguent par un premier accent circonflexe `^` et correspond à n'importe quel caractère *à l'exception des caractères qui le suivent*.
100+
Ils se distinguent par un premier accent circonflexe `^` et correspond à n'importe quel caractère *à l'exception de ceux contenus dans ces crochets*.
101101

102-
Par exemple:
102+
Par exemple :
103103

104104
- `pattern:[^aeyo]` -- n'importe quel caractère sauf `'a'`, `'e'`, `'y'` ou `'o'`.
105105
- `pattern:[^0-9]` -- n'importe quel caractère à l'exception des chiffres, équivalent à `pattern:\D`.
106-
- `pattern:[^\s]` -- n'importe quel caractère qui n'est pas un espacement, équivalent à `\S`.
106+
- `pattern:[^\s]` -- tout caractère qui n'est pas un espacement, équivalent à `\S`.
107107

108108
L'exemple ci-dessous cherche n'importe quel caractère n'étant pas une lettre, un chiffre ou un espace :
109109

@@ -113,7 +113,7 @@ alert( "alice15@gmail.com".match(/[^\d\sA-Z]/gi) ); // @ et .
113113

114114
## L'échappement entre []
115115

116-
Habituellement, lorsque nous cherchons précisément un caractère spécial, nous devons l'échapper `pattern:\.`. Et si nous cherchons un backslash, nous utilisons `pattern:\\`, et ainsi de suite.
116+
Habituellement, lorsque nous cherchons précisément un caractère spécial, nous devons l'échapper `pattern:\.`. Et si nous cherchons un backslash, nous utilisons `pattern:\\`, etc.
117117

118118
À l'intérieur de crochets nous pouvons utiliser une grande majorité des caractères spéciaux sans échappement :
119119

@@ -135,7 +135,7 @@ let regexp = /[-().^+]/g;
135135
alert( "1 + 2 - 3".match(regexp) ); // trouve +, -
136136
```
137137

138-
... Si vous décidez par contre de les échapper "au cas où", il n'y aura pas d'impact :
138+
... Si vous décidez de les échapper, "au cas où", il n'y aura de toute façon aucun d'impact :
139139

140140
```js run
141141
// Tout échappé
@@ -152,10 +152,10 @@ Par exemple, cherchons `pattern:[𝒳𝒴]` dans la chaîne `subject:𝒳`:
152152

153153
```js run
154154
alert( '𝒳'.match(/[𝒳𝒴]/) ); // affiche un caractère étrange qui ressemble à [?]
155-
// (la recherche n'a pas fonctionné correctement, seulement la moitié du caractère est retourné)
155+
// (la recherche n'a pas fonctionné correctement, seule une moitié du caractère est retournée)
156156
```
157157

158-
Le résultat est erroné, car par défaut une expression rationnelle ne reconnait pas une telle paire.
158+
Le résultat n'est pas celui attendu, car par défaut une expression rationnelle ne reconnait pas une telle paire.
159159

160160
Le moteur d'expression rationnelle pense que `[𝒳𝒴]` -- ne sont pas deux mais quatre caractères :
161161
1. la moitié gauche de `𝒳` `(1)`,
@@ -179,15 +179,15 @@ Mais si nous ajoutons le marqueur `pattern:u`, on aura alors le comportement att
179179
alert( '𝒳'.match(/[𝒳𝒴]/u) ); // 𝒳
180180
```
181181

182-
On retrouve ce même fonctionnement dans un intervalle, comme `[𝒳-𝒴]`.
182+
On retrouve un mécanisme similaire dans les intervalles, comme `[𝒳-𝒴]`.
183183

184184
Si nous oublions le marqueur `pattern:u`, il y aura une erreur :
185185

186186
```js run
187187
'𝒳'.match(/[𝒳-𝒴]/); // Error: Invalid regular expression
188188
```
189189

190-
En effet sans le marqueur `pattern:u` les paires de seizets sont perçues comme deux caractères distincts, donc `[𝒳-𝒴]` est interprété en `[<55349><56499>-<55349><56500>]` (chacune des paires est remplacée par ses codes). Il est maintenant évident que l'intervalle `56499-55349` n'est pas valide : le premier code `56499` est plus grand que la fin `55349`. Voilà la logique de cette erreur.
190+
En effet sans le marqueur `pattern:u` une paire de seizets est perçue comme deux caractères distincts, donc `[𝒳-𝒴]` est interprété en `[<55349><56499>-<55349><56500>]` (chacune des paires est remplacée par ses codes). Il est maintenant évident que l'intervalle `56499-55349` n'est pas valide : le premier code `56499` est plus grand que le dernier `55349`. Ce qui explique l'erreur précédente.
191191

192192
Avec le marqueur `pattern:u` le modèle est interprété correctement :
193193

0 commit comments

Comments
 (0)