Skip to content

Commit 9f50334

Browse files
committed
translate last part range and flag "u"
1 parent 1575739 commit 9f50334

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
@@ -144,54 +144,54 @@ let regexp = /[\-\(\)\.\^\+]/g;
144144
alert( "1 + 2 - 3".match(regexp) ); // fonctionne aussi: +, -
145145
```
146146

147-
## Ranges and flag "u"
147+
## Intervalles et marqueur "u"
148148

149-
If there are surrogate pairs in the set, flag `pattern:u` is required for them to work correctly.
149+
S'il y a une paire de substitution dans l'ensemble, le marqueur `pattern:u` est requis pour qu'il fonctionne correctement.
150150

151-
For instance, let's look for `pattern:[𝒳𝒴]` in the string `subject:𝒳`:
151+
Par exemple, cherchons `pattern:[𝒳𝒴]` dans la chaîne `subject:𝒳`:
152152

153153
```js run
154-
alert( '𝒳'.match(/[𝒳𝒴]/) ); // shows a strange character, like [?]
155-
// (the search was performed incorrectly, half-character returned)
154+
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é)
156156
```
157157

158-
The result is incorrect, because by default regular expressions "don't know" about surrogate pairs.
158+
Le résultat est erroné, car par défaut les expressions rationnelles "ne connaisse pas" les paires de substitutions.
159159

160-
The regular expression engine thinks that `[𝒳𝒴]` -- are not two, but four characters:
161-
1. left half of `𝒳` `(1)`,
162-
2. right half of `𝒳` `(2)`,
163-
3. left half of `𝒴` `(3)`,
164-
4. right half of `𝒴` `(4)`.
160+
Le moteur d'expression rationnelle pense que `[𝒳𝒴]` -- ne sont pas deux mais quatre caractères:
161+
1. la moitié gauche de `𝒳` `(1)`,
162+
2. la moitié droite de `𝒳` `(2)`,
163+
3. la moitié gauche de `𝒴` `(3)`,
164+
4. la moitié droite de `𝒴` `(4)`.
165165

166-
We can see their codes like this:
166+
On peut voir le code de ces caractères ainsi :
167167

168168
```js run
169169
for(let i=0; i<'𝒳𝒴'.length; i++) {
170170
alert('𝒳𝒴'.charCodeAt(i)); // 55349, 56499, 55349, 56500
171171
};
172172
```
173173

174-
So, the example above finds and shows the left half of `𝒳`.
174+
Donc, le premier exemple trouve et affiche la première moitié de `𝒳`.
175175

176-
If we add flag `pattern:u`, then the behavior will be correct:
176+
Mais si nous ajoutons le marqueur `pattern:u`, on aura alors le comportement attendu :
177177

178178
```js run
179179
alert( '𝒳'.match(/[𝒳𝒴]/u) ); // 𝒳
180180
```
181181

182-
The similar situation occurs when looking for a range, such as `[𝒳-𝒴]`.
182+
On retrouve ce même fonctionnement pour un intervalle, comme `[𝒳-𝒴]`.
183183

184-
If we forget to add flag `pattern:u`, there will be an error:
184+
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-
The reason is that without flag `pattern:u` surrogate pairs are perceived as two characters, so `[𝒳-𝒴]` is interpreted as `[<55349><56499>-<55349><56500>]` (every surrogate pair is replaced with its codes). Now it's easy to see that the range `56499-55349` is invalid: its starting code `56499` is greater than the end `55349`. That's the formal reason for the error.
190+
En effet sans le marqueur `pattern:u` les paires de substitutions sont perçues comme deux caractères distincts, donc `[𝒳-𝒴]` est interprété en `[<55349><56499>-<55349><56500>]` (chaque paire de substitution 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 l'erreur.
191191

192-
With the flag `pattern:u` the pattern works correctly:
192+
Avec le marqueur `pattern:u` le modèle est interprété correctement :
193193

194194
```js run
195-
// look for characters from 𝒳 to 𝒵
195+
// cherche un caractère entre 𝒳 et 𝒵 compris
196196
alert( '𝒴'.match(/[𝒳-𝒵]/u) ); // 𝒴
197197
```

0 commit comments

Comments
 (0)