Skip to content

Commit 96e1811

Browse files
committed
first re-reading
1 parent 35f87d9 commit 96e1811

File tree

3 files changed

+30
-30
lines changed

3 files changed

+30
-30
lines changed

9-regular-expressions/10-regexp-greedy-and-lazy/3-find-html-comments/task.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Trouver des commentaires HTML
1+
# Trouvez des commentaires HTML
22

3-
Trouver tous les commentaires HTML dans le texte :
3+
Trouvez tous les commentaires HTML dans le texte :
44

55
```js
66
let regexp = /your regexp/g;

9-regular-expressions/10-regexp-greedy-and-lazy/4-find-html-tags-greedy-lazy/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ let str = '<> <a href="/"> <input type="radio" checked> <b>';
1212
alert( str.match(regexp) ); // '<a href="/">', '<input type="radio" checked>', '<b>'
1313
```
1414

15-
Pour simplifier un peu, nous considérons ici qu'une balise ne peut pas contenir de `<` ou `>` (même à l'intérieur de guillemets), that simplifies things a bit.
15+
Pour simplifier un peu, nous considérons ici qu'une balise ne peut pas contenir de `<` ou `>` (même à l'intérieur de guillemets).

9-regular-expressions/10-regexp-greedy-and-lazy/article.md

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Quantificateur glouton ou paresseux
1+
# Quantificateurs gloutons ou paresseux
22

33
Les quantificateurs, à première vue, très simples, peuvent parfois être retors.
44

@@ -14,7 +14,7 @@ La première chose à faire est de trouver ces guillemets droits, et nous pourro
1414

1515
Une expression régulière comme `pattern:/".+"/g` (des guillemets, puis quelque chose, puis d'autres guillemets) semble être une bonne approche, mais pas exactement !
1616

17-
Essayons ça:
17+
Testons cela :
1818

1919
```js run
2020
let regexp = /".+"/g;
@@ -28,49 +28,49 @@ alert( str.match(regexp) ); // "witch" and her "broom"
2828

2929
Au lieu de trouver deux correspondances `match:"witch"` et `match:"broom"`, il n'en trouve qu'une : `match:"witch" and her "broom"`.
3030

31-
Qui peut être vu comme "La cupidité est à la racine de tous les ennuis".
31+
Ce qui peut être vu comme "La gourmandise est un défaut qui cause beaucoup de torts à ceux qui s’y livrent".
3232

3333
## Recherche gloutonne
3434

3535
Pour trouver une correspondance, le moteur d'expression régulière utilise l'algorithme suivant :
3636

3737
- Pour chacune des positions de la chaîne de caractère
3838
- Essaye de trouver le motif à cette position.
39-
- S'il n'y a pas de correspondance, va à la prochaine position.
39+
- Si aucune correspondance, va à la prochaine position.
4040

41-
Cette description succincte ne vous éclaire peut être pas plus sur la raison de l'échec de la recherche précédente, alors voyons plus en détail comment se déroule la recherche du motif `pattern:".+"`.
41+
Cette description succincte ne suffit peut-être pas à mettre en évidence l'échec précédent, alors voyons plus en détail comment se déroule la recherche du motif `pattern:".+"`.
4242

43-
1. le premier caractère du motif sont des guillemets droits `pattern:"`.
43+
1. Le premier caractère du motif sont des guillemets droits `pattern:"`.
4444

45-
le moteur d'expressions régulières essaye de les trouver à la position zéro de la chaîne originale `subject:a "witch" and her "broom" is one`, mais comme il y a un `subject:a` à cette place, il n'y a pas de correspondance possible.
45+
Le moteur d'expression régulière essaye de les trouver à la position zéro de la chaîne source `subject:a "witch" and her "broom" is one`, mais comme il y a un `subject:a` à cette place, il n'y a pas de correspondance possible.
4646

4747
Puis il avance : va aux positions suivantes dans la chaîne source et essaye d'y trouver le premier caractère du motif, il échoue une nouvelle fois, avant de trouver les guillemets en troisième position :
4848

4949
![](witch_greedy1.svg)
5050

51-
2. Les premiers guillemets trouvé, le moteur essaye de trouver la correspondance pour la suite du motif. Il essaye de voir si le reste de la chaîne suit le motif `pattern:.+"`.
51+
2. Les premiers guillemets trouvés, le moteur essaye de trouver la correspondance pour la suite du motif. Il essaye de voir si le reste de la chaîne suit le motif `pattern:.+"`.
5252

53-
Dans notre cas le caractère suivant dans le motif est `pattern:.` (un point). Il signifie "tout caractère, nouvelle ligne exceptée", la lettre suivante de la chaîne `match:'w'` marche :
53+
Dans notre cas le caractère suivant dans le motif est `pattern:.` (un point). Il signifie "tout caractère, nouvelle ligne exceptée", la lettre suivante de la chaîne `match:'w'` correspond bien :
5454

5555
![](witch_greedy2.svg)
5656

5757
3. Le point est alors répété avec le quantificateur `pattern:.+`. le moteur d'expression régulière ajoute à la correspondance, les caractères les uns à la suite des autres.
5858

59-
... Jusqu'à quand ? Tout caractère correspond au point, il ne s'arrête qu'une fois arrivé à la fin de chaîne :
59+
... Jusqu'à quand ? Comme tout caractère correspond au point, il ne s'arrête qu'une fois arrivé à la fin de chaîne :
6060

6161
![](witch_greedy3.svg)
6262

6363
4. La répétition du motif `pattern:.+` maintenant finie, il essaye de trouver le caractère suivant. Ce sont des guillemets droits `pattern:"`. Mais problème : arrivé en bout de chaîne, il n'y a plus de caractère !
6464

65-
Le moteur d'expressions régulières comprend qu'il a pris trop de `pattern:.+` et commence à revenir sur ses pas.
65+
Le moteur d'expression régulière comprend qu'il a pris trop de `pattern:.+` et commence à revenir sur ses pas.
6666

6767
En d'autres termes, il réduit la correspondance avec le quantificateur d'un caractère :
6868

6969
![](witch_greedy4.svg)
7070

71-
Il considère maintenant que `pattern:.+` finit un caractère avant la fin de chaîne et essaye de la trouver la fin du motif à partir de cette position.
71+
Il considère maintenant que `pattern:.+` se termine un caractère avant la fin de la chaîne et essaye de la trouver la fin du motif à partir de cette position.
7272

73-
Et s'il y avait des guillemets ici, alors la recherche serait finie, mais le dernier caractère est `subject:'e'`, il n'y a donc toujours pas de correspondance.
73+
Et s'il y avait des guillemets ici, alors la recherche s'arrêterait, mais le dernier caractère est `subject:'e'`, il n'y a donc toujours pas de correspondance.
7474

7575
5. ... Le moteur d'expression régulière diminue encore le nombre de répétitions de `pattern:.+` d'un autre caractère :
7676

@@ -82,11 +82,11 @@ Cette description succincte ne vous éclaire peut être pas plus sur la raison d
8282

8383
![](witch_greedy6.svg)
8484

85-
7. La correspondance avec motif est complète.
85+
7. La correspondance au motif est complète.
8686

87-
8. La première correspondance est donc `match:"witch" and her "broom"`. Si l'expression régulière porte le marqueur `pattern:g`, alors la recherche continuera à partir de la fin de la première correspondance. Comme il n'y a plus de guillemets dans la suite de la chaîne `subject:is one`, il n'y pas d'autres correspondance.
87+
8. La première correspondance est donc `match:"witch" and her "broom"`. Si l'expression régulière porte le marqueur `pattern:g`, alors la recherche continuera à partir de la fin de cette première correspondance. Comme il n'y a plus de guillemets dans la suite de la chaîne `subject:is one`, il n'y pas d'autres correspondances.
8888

89-
Ce n'est peut-être pas ce que nous attendions, mais c'est ainsi que cela fonctionne.
89+
Ce n'est peut-être pas ce que nous attendions, mais c'est bien ainsi que cela fonctionne.
9090

9191
**En mode glouton (mode par défaut) un caractère suivi d'un quantificateur est répété autant de fois que possible.**
9292

@@ -100,7 +100,7 @@ Le mode paresseux des quantificateurs est l'opposé du mode glouton. Il signifie
100100

101101
Nous pouvons l'activer en ajoutant un `pattern:'?'` après le quantificateur, il devient alors `pattern:*?` ou `pattern:+?` ou encore `pattern:??` pour le `pattern:'?'`.
102102

103-
Pour clarifier les choses : le point d'interrogation `pattern:?` est en général un quantificateur (zero ou un), mais si nous l'ajoutons *à la suite d'un autre quantificateur (ou bien lui-même)* il prend une autre signification -- il change le mode de correspondance de glouton à paresseux.
103+
Pour clarifier les choses : le point d'interrogation `pattern:?` est en général un quantificateur (zero ou un), mais si nous l'ajoutons *à la suite d'un autre quantificateur (ou bien de lui-même)* il prend une autre signification -- il change le mode de correspondance de glouton à paresseux.
104104

105105
La regexp `pattern:/".+?"/g` fonctionne alors comme prévu : elle trouve `match:"witch"` et `match:"broom"`:
106106

@@ -114,7 +114,7 @@ alert( str.match(regexp) ); // "witch", "broom"
114114

115115
Pour bien comprendre la différence, suivons cette recherche pas à pas.
116116

117-
1. La première étape est la même : elle trouve le premier motif `pattern:'"'` en 3e position :
117+
1. La première étape est la même : elle trouve le premier motif `pattern:'"'` en 3&#x1D49; position :
118118

119119
![](witch_greedy1.svg)
120120

@@ -127,7 +127,7 @@ Pour bien comprendre la différence, suivons cette recherche pas à pas.
127127
![](witch_lazy3.svg)
128128

129129
S'il y avait des guillemets ici, alors la recherche s'arrêterait, mais il y a un `'i'`, donc pas de correspondance.
130-
4. Le moteur d'expressions régulières augmente alors le nombre de répétitions pour le point et essaye à nouveau :
130+
4. Le moteur d'expression régulière augmente alors le nombre de répétitions pour le point et essaye à nouveau :
131131

132132
![](witch_lazy4.svg)
133133

@@ -136,7 +136,7 @@ Pour bien comprendre la différence, suivons cette recherche pas à pas.
136136

137137
![](witch_lazy5.svg)
138138

139-
6. La recherche suivant commence alors depuis la fin de la correspondance et ressort une autre résultat :
139+
6. La recherche suivante commence alors depuis la fin de la correspondance et ressort une autre résultat :
140140

141141
![](witch_lazy6.svg)
142142

@@ -161,18 +161,18 @@ alert( "123 456".match(/\d+ \d+?/) ); // 123 4
161161
Le mode paresseux ne répète rien sans en avoir besoin. Le motif est terminé, donc la recherche aussi. Nous avons une correspondance `match:123 4`.
162162

163163
```smart header="Optimisations"
164-
Les moteurs d'expressions régulières récents arrive à optimiser leurs algorithmes internes. Ils fonctionnent donc un peu différemment.
164+
Les moteurs d'expression régulière récents arrive à optimiser leurs algorithmes internes. Ils fonctionnent donc un peu différemment.
165165
166-
Mais pour comprendre comment fonctionne les expression régulières et contruire des expressions régulière, nous n'avons pas besoin d'en savoir plus. Ils sont seulement utilisé en interne pour optimiser les choses.
166+
Mais pour comprendre comment fonctionnent les expression régulières et pour en contruire, nous n'avons pas besoin d'en savoir plus. Ils sont seulement utilisé en interne pour optimiser les choses.
167167
168-
Comme les expressions régulières complexes sont sont difficiles à optimiser, la recherche peut se dérouler exactement comme nous l'avons décri.
168+
Comme les expressions régulières complexes sont difficiles à optimiser, la recherche peut se dérouler exactement comme nous l'avons décri.
169169
```
170170

171171
## Approche alternative
172172

173173
Avec les expressions régulières, Il y a souvent plusieurs façons pour arriver au même résultat.
174174

175-
Dans notre cas, nous pouvons trouver des chaines de caractères entre guillemets sauf mode paresseux en utilisant la regexp `pattern:"[^"]+"`:
175+
Dans notre cas, nous pouvons trouver des chaines de caractères entre guillemets sans mode paresseux en utilisant la regexp `pattern:"[^"]+"`:
176176

177177
```js run
178178
let regexp = /"[^"]+"/g;
@@ -253,7 +253,7 @@ let regexp = /<a href=".*?" class="doc">/g;
253253
alert( str.match(regexp) ); // <a href="link1" class="wrong">... <p style="" class="doc">
254254
```
255255

256-
Et maintenant ça échoue. La correspondance inclue non seulement le lien, mais aussi beaucoup de text ensuite, incluant `<p...>`.
256+
Et maintenant ça échoue. La correspondance inclue non seulement le lien, mais aussi beaucoup du texte suivant, incluant `<p...>`.
257257

258258
Pourquoi ?
259259

@@ -272,7 +272,7 @@ Voici le schéma de la correspondance en alignant les caractères :
272272
<a href="link1" class="wrong">... <p style="" class="doc">
273273
```
274274

275-
Nous avons donc besoin que le motif recherche `<a href="...something..." class="doc">`, mais les modes, glouton ou paresseux, rencontre des problèmes.
275+
Nous avons donc besoin que le motif recherche `<a href="...something..." class="doc">`, mais les modes, glouton ou paresseux, rencontrent des problèmes.
276276

277277
Une alternative fonctionnelle peut être : `pattern:href="[^"]*"`. Cela prendra tous les caractères à l'intérieur de l'attribut `href` jusqu'aux prochains guillemets, juste ce qu'il faut.
278278

@@ -293,7 +293,7 @@ alert( str2.match(regexp) ); // <a href="link1" class="doc">, <a href="link2" cl
293293
Les quantificateurs ont deux modes de travail :
294294

295295
Glouton
296-
: Par défaut le moteur d'expressions régulières essaye de répéter le caractère quantifié autant de fois que possible. Par exemple, `pattern:\d+` consomme tous les chiffres possibles. Quand il devient impossible d'en consommer d'autre (plus de chiffre ou fin de chaîne), il continue alors pour trouver la fin du motif. S'il ne trouve pas de correspondance il réduit alors le nombre de répétitions effectuées (il revient sur ses pas) et essaye à nouveau.
296+
: Par défaut le moteur d'expression régulière essaye de répéter le caractère quantifié autant de fois que possible. Par exemple, `pattern:\d+` consomme tous les chiffres possibles. Quand il devient impossible d'en consommer d'autre (plus aucun chiffre ou fin de chaîne), il continue alors pour trouver la fin du motif. S'il ne trouve pas de correspondance, il réduit alors le nombre de répétitions effectuées (il revient sur ses pas) et essaye à nouveau.
297297

298298
Paresseux
299299
: Activé par le point d'interrogation `pattern:?` après le quantificateur. Le moteur de regexp essaye de trouver une correspondance pour le reste du motif avant chaque répétition du caractère quantifié.

0 commit comments

Comments
 (0)