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
+42-42Lines changed: 42 additions & 42 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,12 +19,12 @@ Ha 3 modalità:
19
19
alert( result[1] ); // Script (primo gruppo di acquisizione)
20
20
alert( result.length ); // 2
21
21
22
-
//Additional information:
22
+
//Informazioni aggiuntive:
23
23
alert( result.index ); // 7 (posizione della corrispondenza)
24
24
alert( result.input ); // I love JavaScript (stringa sorgente)
25
25
```
26
26
27
-
2. Se la `regexp` presenta la flag `pattern:g`, restituisce un array contenente tutte le corrispondenze sotto forma di stringhe, senza i gruppi di acquisizione né ulteriori dettagli.
27
+
2. Se la `regexp` presenta la flag `pattern:g`, restituisce un array contenente tutte le corrispondenze sotto forma di stringhe, senza i gruppi di acquisizione o ulteriori dettagli.
28
28
```js run
29
29
let str = "I love JavaScript";
30
30
@@ -34,7 +34,7 @@ Ha 3 modalità:
34
34
alert( result.length ); // 1
35
35
```
36
36
37
-
3. Se non esistono corrispondenze, indipendentemente dalla presenza o meno della flag `pattern:g`, è restituito `null`.
37
+
3. Se non esistono corrispondenze, indipendentemente dalla presenza o meno della flag `pattern:g`, ci viene restituito `null`.
38
38
39
39
È una differenza sottile, ma importante. Se non esistono corrispondenze, infatti, non ci viene restituito un array vuoto, ma `null`. È facile sbagliare dimenticandosene, e.g.:
@@ -114,13 +114,13 @@ let str = "A drop of ink may make a million think";
114
114
alert( str.search( /ink/i ) ); // 10 (posizione della prima corrispondenza)
115
115
```
116
116
117
-
**La limitazione importante:`search` trova solo la prima corrispondenza.**
117
+
**La limitazione importante:`search` trova solamente la prima corrispondenza.**
118
118
119
-
Se abbiamo bisogno della posizione di una corrispondenza successiva, dobbiamo usare altri mezzi, ad esempio trovandole tutte con `str.matchAll(regexp)`.
119
+
Se avessimo bisogno della posizione di una corrispondenza successiva, dovremmo usare altri mezzi, ad esempio `str.matchAll(regexp)` per trovarle tutte.
120
120
121
121
## str.replace(str|regexp, str|func)
122
122
123
-
Questo è un metodo generico per cercare e sostituire e uno dei più utili: è l'equivalente di un coltellino svizzero in questo campo.
123
+
Questo è un metodo generico per cercare e sostituire, ed è uno dei più utili: è l'equivalente di un coltellino svizzero in questo campo.
124
124
125
125
Possiamo usarlo senza espressioni regolari, per cercare e sostituire una sottostringa:
126
126
@@ -129,11 +129,11 @@ Possiamo usarlo senza espressioni regolari, per cercare e sostituire una sottost
129
129
alert('12-34-56'.replace("-", ":")) // 12:34-56
130
130
```
131
131
132
-
Tuttavia, vi è un'insidia.
132
+
Tuttavia, c'è un'insidia.
133
133
134
-
**Quando il primo argomento di `replace` è una stringa, solo la prima corrispondenza viene sostituita.**
134
+
**Quando il primo argomento di `replace` è una stringa, solo la prima corrispondenza sarà sostituita.**
135
135
136
-
Si può vedere nell'esempio sopra: solo il primo `"-"` è stato sostituito da `":"`.
136
+
È possibile osservarlo nell'esempio sopra: solo il primo `"-"` è stato sostituito da `":"`.
137
137
138
138
Per trovare tutti i trattini, non dobbiamo usare la stringa `"-"`, ma l'espressione regolare `pattern:/-/g`, obbligatoriamente con la flag`pattern:g`:
Nell'esempio seguente ci sono due parentesi, pertanto la funzione di sostituzione è chiamata con 5 argomenti: la prima è la corrispondenza completa, poi le 2 parentesi, e dopo di esse la posizione della corrispondenza e la stringa sorgente (non usate nell'esempio):
195
+
Nell'esempio seguente ci sono due parentesi, di conseguenza la funzione di sostituzione è chiamata con 5 argomenti: la prima è la corrispondenza completa, poi le 2 parentesi, e dopo di esse la posizione della corrispondenza e la stringa sorgente (omesse nell'esempio):
196
196
197
197
```js run
198
198
let str = "John Smith";
@@ -212,7 +212,7 @@ let result = str.replace(/(\w+) (\w+)/, (...match) => `${match[2]}, ${match[1]}`
212
212
alert(result); // Smith, John
213
213
```
214
214
215
-
O, se stiamo usando gruppi nominati, l'oggetto `groups` essi contenente è sempre l'ultimo, così possiamo ottenerlo in questo modo:
215
+
Altrimenti, se stiamo usando gruppi nominati, l'oggetto `groups` essi contenente è sempre l'ultimo e possiamo ottenerlo in questo modo:
216
216
217
217
```js run
218
218
let str = "John Smith";
@@ -226,16 +226,16 @@ let result = str.replace(/(?<name>\w+) (?<surname>\w+)/, (...match) => {
226
226
alert(result); // Smith, John
227
227
```
228
228
229
-
Usare una funzione ci permette di usare un potere sostitutivo supremo, poiché ottiene tutte le informazioni sulla corrispondenza, ha accesso alle variabili esterne e può fare qualsiasi cosa.
229
+
Usare una funzione ci permette di adoperare un potere sostitutivo supremo, poiché essa ottiene tutte le informazioni sulla corrispondenza, ha accesso alle variabili esterne e può fare qualsiasi cosa.
230
230
231
231
## str.replaceAll(str|regexp, str|func)
232
232
233
233
Questo metodo è praticamente uguale a `str.replace`, ma con due differenze rilevanti:
234
234
235
235
1. Se il primo argomento è una stringa, sostituisce *tutte le corrispondenze* della stringa, mentre `replace` sostituisce solamente la *prima corrispondenza*.
236
-
2. Se il primo argomento è un'espressione regolare con la flag `g`, sarà generato un errore. Con la `g` flag, funziona come `replace`.
236
+
2. Se il primo argomento è un'espressione regolare con la flag `g`, sarà restituito un errore. Con la `g` flag, infatti, funziona come `replace`.
237
237
238
-
Il caso principale in cui si usa `replaceAll` è la sostituzione di tutte le corrispondenze di una stringa.
238
+
Il motivo principale per cui si usa `replaceAll` è la necessità di sostituire ogni corrispondenza in una stringa.
239
239
240
240
In questo modo:
241
241
@@ -251,17 +251,17 @@ Il metodo `regexp.exec(str)` restituisce una corrispondenza di `regexp` nella st
251
251
252
252
Si comporta differentemente a seconda della presenza o meno della flag `pattern:g` nell'espressione regolare.
253
253
254
-
Se non c'è `pattern:g`, `regexp.exec(str)`restituisce la prima corrispondenza, esattamente come `str.match(regexp)`. Questo comportamento non comporta niente di nuovo.
254
+
Se non c'è `pattern:g`, `regexp.exec(str)` restituirà la prima corrispondenza, esattamente come `str.match(regexp)`. Questo comportamento non comporta niente di nuovo.
255
255
256
256
Ma se c'è una flag `pattern:g`, allora:
257
257
- Una chiamata a `regexp.exec(str)` restituisce la prima corrispondenza e salva la posizione immediatamente successiva a essa nella proprietà `regexp.lastIndex`.
258
258
- La successiva chiamata di tale tipo inizia la ricerca a partire dalla posizione `regexp.lastIndex`, restituisce la corrispondenza successiva e salva la posizione seguente in`regexp.lastIndex`.
259
259
-...E così via.
260
-
- Se non esistono corrispondenze, `regexp.exec`restituisce`null` e reimposta`regexp.lastIndex` a `0`.
260
+
- Se non esistono corrispondenze, `regexp.exec`restituirà`null` e reimposterà`regexp.lastIndex` a `0`.
261
261
262
-
Perciò, chiamate ripetute restituiscono tutte le corrispondenze una dopo l'altra, usando la proprietà `regexp.lastIndex` per tenere traccia della posizione di ricerca corrente.
262
+
Perciò le chiamate ripetute restituiscono tutte le corrispondenze una dopo l'altra, usando la proprietà `regexp.lastIndex` per tenere traccia della posizione di ricerca corrente.
263
263
264
-
Nel passato, prima che il metodo `str.matchAll` fosse implementato in JavaScript, le chiamate a `regexp.exec` erano usate nel loop per ottenere tutte le corrispondenze con i gruppi:
264
+
Nel passato, prima che il metodo `str.matchAll` fosse implementato in JavaScript, le chiamate a `regexp.exec` erano usate nei loop per ottenere tutte le corrispondenze con i gruppi:
265
265
266
266
```js run
267
267
let str = 'More about JavaScript at https://javascript.info';
@@ -276,9 +276,9 @@ while (result = regexp.exec(str)) {
276
276
}
277
277
```
278
278
279
-
Questo funziona anche adesso, anche se per i browser moderni solitamente `str.matchAll` è più conveniente.
279
+
Questo approccio funziona anche adesso, anche se per i browser moderni solitamente `str.matchAll` è più conveniente rispetto a un loop contenente `regexp.exec`.
280
280
281
-
**Possiamo usare `regexp.exec` per cercare a partire da una posizione data impostando manualmente `lastIndex`.**
281
+
**Possiamo usare `regexp.exec` per cercare a partire da una posizione da noi scelta impostando manualmente `lastIndex`.**
282
282
283
283
Per esempio:
284
284
@@ -293,7 +293,7 @@ alert( regexp.exec(str) ); // world
293
293
294
294
Se l'espressione regolare presenta la flag `pattern:y`, la ricerca sarà eseguita esattamente alla posizione `regexp.lastIndex`, senza andare oltre.
295
295
296
-
Sostituiamo la flag `pattern:g` con `pattern:y` nell'esempio sopra. Non ci saranno corrispondenze, in quanto non c'è una parola alla posizione `5`:
296
+
Sostituiamo la flag `pattern:g` con `pattern:y` nell'esempio sopra. Non ci saranno corrispondenze, perché non c'è una parola alla posizione `5`:
297
297
298
298
```js run
299
299
let str ='Hello, world!';
@@ -304,11 +304,11 @@ regexp.lastIndex = 5; // ricerca esattamente alla posizione 5
304
304
alert( regexp.exec(str) ); // null
305
305
```
306
306
307
-
Ciò è conveniente per le situazioni in cui abbiamo bisogno di "leggere" qualcosa dalla stringa con un'espressione regolare alla posizione esatta, non da qualche parte più lontano.
307
+
Ciò è conveniente per le situazioni in cui abbiamo bisogno di "leggere" qualcosa dalla stringa con un'espressione regolare alla posizione esatta, non a un'altra posizione più avanti.
308
308
309
309
## regexp.test(str)
310
310
311
-
Il metodo `regexp.test(str)` cerca una corrispondenza e restituisce `true/false` a seconda della sua esistenza.
311
+
Il metodo `regexp.test(str)` cerca una corrispondenza in una stringa `str`e restituisce `true/false` a seconda della sua esistenza.
Se l'espressione regolare ha la flag `pattern:g`, `regexp.test` cerca dalla proprietà `regexp.lastIndex` e l'aggiorna, come fa `regexp.exec`.
332
+
Se l'espressione regolare ha la flag `pattern:g`, `regexp.test` cerca a partire dal valore della proprietà `regexp.lastIndex` e l'aggiorna, come fa `regexp.exec`.
333
333
334
-
Pertanto possiamo usarlo per cercare da una posizione data:
334
+
Pertanto possiamo usarlo per cercare a partire da una posizione da noi scelta:
````warn header="Same global regexp tested repeatedly on different sources may fail"
347
-
Se applichiamo la stessa espressione regolare globale a input differenti, potrebbe produrre un risultato sbagliato, poiché la chiamata di `regexp.test`manda avanti la proprietà `regexp.lastIndex`, pertanto la ricerca in un'altra stringa potrebbe iniziare da una posizione diversa da 0.
347
+
Se applichiamo la stessa espressione regolare globale a stringhe differenti potrebbero verificarsi risultati errati, poiché la chiamata di `regexp.test`aggiorna la proprietà `regexp.lastIndex`, per cui la ricerca in un'altra stringa potrebbe iniziare da una posizione diversa da 0.
348
348
349
349
Per esempio, qui chiamiamo `regexp.test` due volte sullo stesso testo, e la seconda volta fallisce:
Ciò avviene esattamente perché `regexp.lastIndex` è diverso da 0 nella seconda prova.
358
+
Ciò avviene proprio perché `regexp.lastIndex` è diverso da 0 nella seconda prova.
359
359
360
-
Per risolvere, possiamo impostare `regexp.lastIndex=0` prima di ogni ricerca. O invece di chiamare metodi sull'espressione regolare, usare i metodi delle stringhe `str.match/search/...`; essi non usano `lastIndex`.
360
+
Per risolvere il problema, possiamo impostare `regexp.lastIndex=0` prima di ogni ricerca, o piuttosto che chiamare metodi sull'espressione regolare, usare i metodi delle stringhe `str.match/search/...`: essi infatti non usano la proprietà`lastIndex`.
0 commit comments