You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 9-regular-expressions/17-regexp-methods/article.md
+63-62Lines changed: 63 additions & 62 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,29 +1,29 @@
1
-
# Methodes des Expressions Regulières et des chaînes de caractères
1
+
# Methodes des Expressions Rationnelles et des chaînes de caractères
2
2
3
-
Dans cet article, nous aborderons différentes méthodes qui fonctionnent en profondeur avec des expressions regulieres (regexps).
3
+
Dans cet article, nous aborderons différentes méthodes qui fonctionnent en profondeur avec des expressions rationnelles (regexps).
4
4
5
5
6
6
## str.match(regexp)
7
7
8
-
La méthode `str.match(regexp)` trouve les correspondances de l'expression reguliere`regexp` dans le texte `str`.
8
+
La méthode `str.match(regexp)` trouve les correspondances de l'expression rationnelle`regexp` dans le texte `str`.
9
9
10
10
11
-
Elle dispose de 3 modes :
11
+
Elle dispose de 3 options :
12
12
13
-
1. si la regexp n'à pas de marqueur `pattern:g`, alors seul la première correspondance est retournée sous la forme d'un tableau avec le groupe capturé et ses propriétés : index (position de la correspondance), et input (chaîne d'entrée équivalent à str):
13
+
1. si la regexp n'à pas de marqueur `pattern:g`, alors seul la première correspondance est retournée sous la forme d'un tableau avec le groupe capturé et ses propriétés : index (indice de la correspondance), et input (chaîne d'entrée équivalent à str):
alert( result[1] ); // Script (premier groupe capturant)
22
22
alert( result.length ); // 2
23
23
24
24
// Additional information:
25
-
alert( result.index ); // 7 (match position)
26
-
alert( result.input ); // I love JavaScript (source string)
25
+
alert( result.index ); // 7 (indice de la chaîne de caractère ou à été trouvée la correspondance)
26
+
alert( result.input ); // I love JavaScript (chaîne sur laquelle a été effectuée la recherche)
27
27
```
28
28
29
29
2. Si la `regexp` dispose d'un marqueur `pattern:g`, alors elle retourne un tableau de toutes les correspondances de texte, sans capturer les groupes ou les autres propriétés.
@@ -96,57 +96,57 @@ Si nous utilisons `for..of` pour boucler sur les résultats de `matchAll`, alors
96
96
97
97
Diviser la chaîne de caractères en utilisant la regexp (ou une sous-chaîne de caractères) comme délimiteur.
98
98
99
-
Nous pouvons utiliser `split` avec un chaîne de caractères comme ceci :
99
+
Nous pouvons utiliser `split` avec une chaîne de caractères comme ceci :
100
100
101
101
```js run
102
102
alert('12-34-56'.split('-')) // array of [12, 34, 56]
103
103
```
104
104
105
-
Mais nous pouvons aussi diviser une chaîne de texte en utilisant une expression regulière:
105
+
Mais nous pouvons aussi diviser une chaîne de texte en utilisant une expression rationnelle:
106
106
107
107
```js run
108
108
alert('12, 34, 56'.split(/,\s*/)) // array of [12, 34, 56]
109
109
```
110
110
111
111
## str.search(regexp)
112
112
113
-
La méthode `str.search(regexp)` renvoie la position du premier motif correspondant, ou `-1` si aucune correspondance n'est trouvée:
113
+
La méthode `str.search(regexp)` renvoie l'indice du premier motif correspondant, ou `-1` si aucune correspondance n'est trouvée:
114
114
115
115
```js run
116
116
let str = "A drop of ink may make a million think";
117
117
118
-
alert( str.search( /ink/i ) ); // 10 (position du premier motif correspondant)
118
+
alert( str.search( /ink/i ) ); // 10 (indice du premier motif correspondant)
119
119
```
120
120
121
121
**Limitation importante:`search` renvoie uniquement la première correspondance.**
122
122
123
-
Si nous avons besoin de la position ou de plus de correspondances, nous devrions utiliser d'autres méthodes, comme les trouver tous avec `str.matchAll(regexp)`.
123
+
Si nous avons besoin de l'indice ou de plus de correspondances, nous devrions utiliser d'autres méthodes, comme les trouver tous avec `str.matchAll(regexp)`.
124
124
125
125
## str.replace(str|regexp, str|func)
126
126
127
-
This is a generic method for searching and replacing, one of most useful ones. The swiss army knife for searching and replacing.
127
+
Il s'agit d'une méthode générique pour chercher et remplacer une chaîne de caractères, l'une des plus utiles. Le couteau suisse pour chercher et remplacer.
128
128
129
-
We can use it without regexps, to search and replace a substring:
129
+
Nous pouvons l'utiliser sans regexps, pour chercher et remplacer une sous-chaîne de caractères:
130
130
131
131
```js run
132
132
// replace a dash by a colon
133
133
alert('12-34-56'.replace("-", ":")) // 12:34-56
134
134
```
135
135
136
-
There's a pitfall though.
136
+
Toutefois, il y a un piège.
137
137
138
-
**When the first argument of `replace` is a string, it only replaces the first match.**
138
+
**Quand le premier argument de`replace`est une chaîne de caractères, elle ne remplace que la première occurence.**
139
139
140
-
You can see that in the example above: only the first `"-"` is replaced by `":"`.
140
+
Vous pouvez constater dans l'exemple ci-dessous que seul le premier `"-"` est remplacé par `":"`.
141
141
142
-
To find all hyphens, we need to use not the string `"-"`, but a regexp `pattern:/-/g`, with the obligatory `pattern:g` flag:
142
+
Pour trouver tous les traits d'unions, nous devons utiliser non pas le caractère`"-"`, mais une expression rationnelle `pattern:/-/g`, avec obligatoirement le marqueur `pattern:g`;
In the example below there are two parentheses, so the replacement function is called with 5 arguments: the first is the full match, then 2 parentheses, and after it (not used in the example) the match position and the source string:
199
+
Dans l'exemple ci-dessous, il y a 2 groupes entre parenthèses. La fonction de remplacement est alors appelée avec 5 arguments: le premier est la correspondance complète, puis chacun des groupes entre parenthèses et enfin (non présent dans l'exemple) l'indice de la correspondance et la chaîne de caractères initiale:
200
200
201
201
```js run
202
202
let str ="John Smith";
@@ -206,7 +206,7 @@ let result = str.replace(/(\w+) (\w+)/, (match, name, surname) => `${surname}, $
206
206
alert(result); // Smith, John
207
207
```
208
208
209
-
If there are many groups, it's convenient to use rest parameters to access them:
209
+
Si il y a de nombreux groupes entre parenthèses, il peut être pratique d'utiliser les paramètres du reste pour y accéder:
210
210
211
211
```js run
212
212
let str ="John Smith";
@@ -216,7 +216,7 @@ let result = str.replace(/(\w+) (\w+)/, (...match) => `${match[2]}, ${match[1]}`
216
216
alert(result); // Smith, John
217
217
```
218
218
219
-
Or, if we're using named groups, then `groups`object with them is always the last, so we can obtain it like this:
219
+
Ou, si nous utilisons des groupes nommés, alors l'objet `groups`est toujours placé en dernier, et nous pouvons l'obtenir de cette façon:
220
220
221
221
```js run
222
222
let str ="John Smith";
@@ -230,24 +230,25 @@ let result = str.replace(/(?<name>\w+) (?<surname>\w+)/, (...match) => {
230
230
alert(result); // Smith, John
231
231
```
232
232
233
-
Using a function gives us the ultimate replacement power, because it gets all the information about the match, has access to outer variables and can do everything.
233
+
Les fonctions représentent le pouvoir ultime pour effectuer un remplacement. Elles recupèrent toutes les informations des correspondances, ont accès aux variables externes et sont capable de tout faire.
234
234
235
235
## regexp.exec(str)
236
236
237
-
The method`regexp.exec(str)`method returns a match for `regexp`in the string `str`. Unlike previous methods, it's called on a regexp, not on a string.
237
+
La méthode`regexp.exec(str)`renvoie une correspondance for `regexp`dans la chaîne de caractères `str`. À l'inverse de la méthode précédente, elle est appelée sur une expression rationnelle et non une châine de caractères.
238
238
239
-
It behaves differently depending on whether the regexp has flag `pattern:g`.
239
+
Elle se comporte différement selon que la regexp dispose d'un marqueur `pattern:g` ou non.
240
240
241
-
If there's no `pattern:g`, then`regexp.exec(str)`returns the first match exactly as `str.match(regexp)`. This behavior doesn't bring anything new.
241
+
Si `pattern:g` n'est pas présent, alors`regexp.exec(str)`renvoie la première correspondance tel que le ferait `str.match(regexp)`. Ce comportement n'apporte rien de nouveau.
242
242
243
-
But if there's flag `pattern:g`, then:
244
-
-A call to`regexp.exec(str)`returns the first match and saves the position immediately after it in the property`regexp.lastIndex`.
245
-
-The next such call starts the search from position `regexp.lastIndex`, returns the next match and saves the position after it in`regexp.lastIndex`.
246
-
- ...And so on.
247
-
-If there are no matches, `regexp.exec` returns `null`and resets `regexp.lastIndex`to`0`.
243
+
Mais si `pattern:g` est utilisé, alors:
244
+
-Un appel à`regexp.exec(str)`renvoie la première correspondance et sauvegarde l'indice situé juste après, accessible via la propriété`regexp.lastIndex`.
245
+
-l'appel suivant à la fonction commence la recherche depuis l'indice contenu dans `regexp.lastIndex`. La correspondance suivante est renvoyé et l'indice positionné après est sauvegardé dans`regexp.lastIndex`.
246
+
- ...Et ainsi de suite.
247
+
-Si aucune correspondance n'est trouvée, `regexp.exec`renvoie `null`et `regexp.lastIndex`est réinitialisé à`0`.
248
248
249
-
So, repeated calls return all matches one after another, using property `regexp.lastIndex`to keep track of the current search position.
249
+
Donc, un appel répété à cette fonction renvoie toutes les correspondances l'une après l'autre, utilisant la propriété `regexp.lastIndex`pour se souvenir de l'indice courant à partir duquel la recherche est effectuée.
250
250
251
+
Avant que la méthode `str.matchAll` ait été ajoutée à Javascript, des appels à `regexp.exec` étaient utilisés dans une boucle afin d'obtenir toutes les correspondances:
251
252
In the past, before the method `str.matchAll` was added to JavaScript, calls of `regexp.exec` were used in the loop to get all matches with groups:
252
253
253
254
```js run
@@ -258,56 +259,56 @@ let result;
258
259
259
260
while (result =regexp.exec(str)) {
260
261
alert( `Found ${result[0]} at position ${result.index}` );
261
-
// Found JavaScript at position 11, then
262
+
// Found JavaScript at position 11, puis
262
263
// Found javascript at position 33
263
264
}
264
265
```
265
266
266
-
This works now as well, although for newer browsers `str.matchAll`is usually more convenient.
267
+
Cela fonctionne également très bien, bien que sur les navigateurs les plus récents `str.matchAll`est généralement plus pratique.
267
268
268
-
**We can use`regexp.exec`to search from a given position by manually setting`lastIndex`.**
269
+
**Nous pouvons utiliser`regexp.exec`pour rechercher à partir d'un indice donné en réglant manuellement la valeur de`lastIndex`.**
269
270
270
-
For instance:
271
+
Par exemple:
271
272
272
273
```js run
273
274
let str ='Hello, world!';
274
275
275
-
let regexp =/\w+/g; //without flag "g", lastIndex property is ignored
276
-
regexp.lastIndex=5; //search from 5th position (from the comma)
276
+
let regexp =/\w+/g; //sans le marqueur "g", la propriété lastIndex est ignorée
277
+
regexp.lastIndex=5; //commence la recherche à partir de la 5ème position (à partir de la virgule)
277
278
278
279
alert( regexp.exec(str) ); // world
279
280
```
280
281
281
-
If the regexp has flag `pattern:y`, then the search will be performed exactly at the position `regexp.lastIndex`, not any further.
282
+
Si la regexp utilise le marqueur `pattern:y`, alors la recherche s'effectuera à l'indice précis de `regexp.lastIndex`, pas plus loin.
282
283
283
-
Let's replace flag`pattern:g`with`pattern:y`in the example above. There will be no matches, as there's no word at position`5`:
284
+
Remplaçons le marqueur`pattern:g`par`pattern:y`dans l'exemple précédent. Aucune correspondance n'est trouvée, car il n'y a aucun mot à l'indice`5`:
284
285
285
286
```js run
286
287
let str ='Hello, world!';
287
288
288
289
let regexp =/\w+/y;
289
-
regexp.lastIndex=5; //search exactly at position 5
290
+
regexp.lastIndex=5; //cherche exactement à l'indice 5
290
291
291
292
alert( regexp.exec(str) ); // null
292
293
```
293
294
294
-
That's convenient for situations when we need to "read" something from the string by a regexp at the exact position, not somewhere further.
295
+
C'est pratique dans une situation où nous cherchons uniquement à lire quelque chose au sein d'un texte avec une regexp à un indice spécifique, en occultant le reste.
295
296
296
297
## regexp.test(str)
297
298
298
-
The method`regexp.test(str)`looks for a match and returns`true/false`whether it exists.
299
+
La méthode`regexp.test(str)`vérifie qu'une correspondance existe et renvoie`true/false`selon le cas.
299
300
300
-
For instance:
301
+
Par exemple:
301
302
302
303
```js run
303
304
let str ="I love JavaScript";
304
305
305
-
//these two tests do the same
306
+
//Ces deux tests réalisent exactement la même chose
0 commit comments