Skip to content

Commit 936d59b

Browse files
committed
rationnelle => régulière, modèle => motif + minor changes
1 parent 45ab136 commit 936d59b

File tree

1 file changed

+22
-22
lines changed
  • 9-regular-expressions/10-regexp-greedy-and-lazy

1 file changed

+22
-22
lines changed

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

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

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

5-
Nous devons mieux comprendre comment marche une recherche pour arriver à trouver des modèles plus complexes que `pattern:/\d+/`.
5+
Pour réussir à trouver des motifs plus complexes que `pattern:/\d+/`, nous devons voir plus en détail comment se déroule une recherche.
66

77
Prenons comme exemple la tâche suivante.
88

9-
Nous avons un texte dans lequel nous devons remplacer tous les guillemets droits (doubles) `"..."` par des guillemets français : `«...»`, qui sont préférés comme typographie dans de nombreux pays.
9+
Nous avons un texte dans lequel nous devons remplacer tous les guillemets droits (doubles) `"..."` par des guillemets français : `«...»`, souvent préférés comme typographie dans de nombreux pays.
1010

1111
Par exemple : `"Hello, world"` devrait se transformer en `«Hello, world»`. Il existe d'autre guillemets, comme `„Witam, świat!”` (polonais) ou `「你好,世界」` (chinois), mais pour notre exemple choisissons `«...»`.
1212

13-
La première chose à faire est de trouver ces guillemets droits, et nous pourrons alors les remplacer.
13+
La première chose à faire est de trouver ces guillemets droits, et nous pourrons ensuite les remplacer.
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

@@ -24,73 +24,73 @@ let str = 'a "witch" and her "broom" is one';
2424
alert( str.match(regexp) ); // "witch" and her "broom"
2525
```
2626

27-
... Nous pouvons voir que ça ne marche exactement comme prévu !
27+
... Nous pouvons voir que ça ne marche pas exactement comme prévu !
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

3131
Qui peut être vu comme "La cupidité est à la racine de tous les ennuis".
3232

3333
## Recherche gloutonne
3434

35-
Pour trouver une correspondance, le moteur d'expression rationnelle utilise l'algorithme suivant :
35+
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
38-
- Essaye de trouver le modèle à cette position.
38+
- Essaye de trouver le motif à cette position.
3939
- S'il n'y a pas de 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 modèle `pattern:".+"`.
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:".+"`.
4242

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

45-
le moteur d'expressions rationnelles 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'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.
4646

47-
Puis il avance : va aux positions suivantes dans la chaîne source et essaye d'y trouver le premier caractère du modèle, il échoue une nouvelle fois, avant de trouver les guillemets en troisième position :
47+
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 modèle. Il essaye de voir si le reste de la chaîne suit le modèle `pattern:.+"`.
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:.+"`.
5252

53-
Dans notre cas le caractère suivant dans le modèle 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'` marche :
5454

5555
![](witch_greedy2.svg)
5656

57-
3. Le point est alors répété avec le quantificateur `pattern:.+`. le moteur d'expression rationnelle ajoute à la correspondance, les caractères les uns à la suite des autres.
57+
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

5959
... Jusqu'à quand ? 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

63-
4. La répétition du modèle `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 !
63+
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 rationnelles comprend qu'il a pris trop de `pattern:.+` et commence à revenir sur ses pas.
65+
Le moteur d'expressions régulières 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 modèle à partir de cette position.
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.
7272

7373
Et s'il y avait des guillemets ici, alors la recherche serait fini, mais le dernier caractère est `subject:'e'`, il n'y a donc toujours pas de correspondance.
7474

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

7777
![](witch_greedy5.svg)
7878

7979
les guillemets `pattern:'"'` ne correspondent pas à `subject:'n'`.
8080

81-
6. Le moteur continue sa marche arrière : il réduit le nombre de répétitions de `pattern:'.'` jusqu'à trouver une correspondance pour la suite du modèle (dans notre cas `pattern:'"'`) :
81+
6. Le moteur continue sa marche arrière : il réduit le nombre de répétitions de `pattern:'.'` jusqu'à trouver une correspondance pour la suite du motif (dans notre cas `pattern:'"'`) :
8282

8383
![](witch_greedy6.svg)
8484

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

8787
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.
8888

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

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

93-
Le moteur d'expression rationnelle ajoute autant de caractères que possible pour le modèle `pattern:.+`, puis réduit la correspondance caractère par caractère, si la suite du modèle ne trouve pas de correspondance.
93+
Le moteur d'expression régulière ajoute autant de caractères que possible pour le motif `pattern:.+`, puis réduit la correspondance caractère par caractère, si la suite du motif ne trouve pas de correspondance.
9494

9595
Nous avons besoin d'autre chose pour mener à bien notre tâche. Et le mode paresseux va pouvoir nous aider.
9696

0 commit comments

Comments
 (0)