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
The flag `pattern:y`allows to perform the search at the given position in the source string.
4
+
Il flag `pattern:y`consente di eseguire la ricerca basata sulla posizione fornita all'interno di una stringa.
5
5
6
-
To grasp the use case of `pattern:y`flag, and better understand the ways of regexps, let's explore a practical example.
6
+
Per comprendere il caso d'uso del flag `pattern:y`e comprendere meglio le modalità delle espressioni regolari, esploriamo un esempio pratico.
7
7
8
-
One of common tasks for regexps is "lexical analysis": we get a text, e.g. in a programming language, and need to find its structural elements. For instance, HTML has tags and attributes, JavaScript code has functions, variables, and so on.
8
+
Uno dei compiti comuni per le espressioni regolari è "l'analisi lessicale": osserviamo un testo, ad es., in un linguaggio di programmazione, in cui abbiamo bisogno di trovare gli elementi strutturali. Ad esempio, l'HTML ha tag e attributi, il codice JavaScript ha funzioni, variabili e così via.
9
9
10
-
Writing lexical analyzers is a special area, with its own tools and algorithms, so we don't go deep in there, but there's a common task: to read something at the given position.
10
+
La scrittura di analizzatori lessicali è un ambito particolare, con propri strumenti e algoritmi, quindi non approfondiremo, ma c'è un'attività comune che ci viene incontro: leggere qualcosa a una certa posizione.
11
11
12
-
E.g. we have a code string `subject:let varName = "value"`, and we need to read the variable name from it, that starts at position`4`.
12
+
Per esempio, data questa stringa di codice `subject:let varName = "value"`, estraiamo il nome della variabile, che inizia alla posizione`4`.
13
13
14
-
We'll look for variable name using regexp `pattern:\w+`. Actually, JavaScript variable names need a bit more complex regexp for accurate matching, but here it doesn't matter.
14
+
Proveremo dapprima a cercare il nome della variabile usando una regexp `pattern:\w+`. In realtà, i nomi delle variabili JavaScript richiedono espressioni regolari un po' più complesse per una corrispondenza accurata, ma per il nostro esempio non importa.
15
15
16
-
-A call to`str.match(/\w+/)`will find only the first word in the line (`let`). That's not it.
17
-
-We can add the flag `pattern:g`. But then the call`str.match(/\w+/g)`will look for all words in the text, while we need one word at position `4`. Again, not what we need.
16
+
-Una chiamata a`str.match(/\w+/)`troverà solo la prima parola nella riga (`let`). Non è essa.
17
+
-Possiamo aggiungere il flag `pattern:g`. Ma poi la chiamata`str.match(/\w+/g)`cercherà tutte le parole nel testo, mentre abbiamo bisogno di una parola alla posizione `4`. Ancora una volta, non è quello di cui abbiamo bisogno.
18
18
19
-
**So, how to search for a regexp exactly at the given position?**
19
+
**Allora, come effettuiamo una ricerca con una regexp esattamente alla posizione data?**
20
20
21
-
Let's try using method`regexp.exec(str)`.
21
+
Proviamo quindi ad usare il metodo`regexp.exec(str)`.
22
22
23
-
For a `regexp` without flags `pattern:g`and`pattern:y`, this method looks only for the first match, it works exactly like`str.match(regexp)`.
23
+
Questa `regexp`, senza il flag `pattern:g`ne`pattern:y`, troverà solamente la prima corrispondenza, funzionerà esattamente come`str.match(regexp)`.
24
24
25
-
...But if there's flag `pattern:g`, then it performs the search in `str`, starting from position stored in the`regexp.lastIndex` property. And, if it finds a match, then sets `regexp.lastIndex`to the index immediately after the match.
25
+
...Ma se usiamo il flag `pattern:g`, allora verrà effettuata una ricerca in `str`, partendo dalla posizione memorizzata nella proprietà`regexp.lastIndex`. E, se trova una corrispondenza, imposta `regexp.lastIndex`sull'indice immediatamente dopo la corrispondenza.
26
26
27
-
In other words, `regexp.lastIndex`serves as a starting point for the search, that each `regexp.exec(str)`call resets to the new value ("after the last match"). That's only if there's `pattern:g` flag, of course.
27
+
In altre parole, `regexp.lastIndex`serve come punto di partenza per la ricerca, ad ogni chiamata di `regexp.exec(str)`resetta al nuovo valore ("dopo l'ultima corrispondenza"). Questo solo se c'è il flag `pattern:g`, ovviamente.
28
28
29
-
So, successive calls to `regexp.exec(str)`return matches one after another.
29
+
Quindi, chiamate successive a `regexp.exec(str)`ritornano corrispondenze una dopo l'altra.
30
30
31
-
Here's an example of such calls:
31
+
Ecco un esempio di tali chiamate:
32
32
33
33
```js run
34
-
let str ='let varName'; //Let's find all words in this string
34
+
let str ='let varName'; //Cerchiamo tutte le parole in questa stringa
Such use of `regexp.exec`is an alternative to method `str.matchAll`, with a bit more control over the process.
67
+
L'uso di `regexp.exec`è un'alternativa al metodo `str.matchAll`, con un po' più di controllo sul processo.
68
68
69
-
Let's go back to our task.
69
+
Torniamo al nostro compito.
70
70
71
-
We can manually set `lastIndex`to`4`, to start the search from the given position!
71
+
Possiamo impostare manualmente `lastIndex`a`4`, per avviare la ricerca dalla posizione data!
72
72
73
-
Like this:
73
+
Come questo:
74
74
75
75
```js run
76
76
let str ='let varName = "value"';
77
77
78
-
let regexp =/\w+/g; //without flag "g", property lastIndex is ignored
78
+
let regexp =/\w+/g; //senza flag "g", la proprietà lastIndex è ignorata
79
79
80
80
*!*
81
81
regexp.lastIndex=4;
@@ -85,54 +85,54 @@ let word = regexp.exec(str);
85
85
alert(word); // varName
86
86
```
87
87
88
-
Hooray! Problem solved!
88
+
Urrà! Problema risolto!
89
89
90
-
We performed a search of`pattern:\w+`, starting from position`regexp.lastIndex = 4`.
90
+
Abbiamo eseguito una ricerca con`pattern:\w+`, partendo dalla posizione`regexp.lastIndex = 4`.
91
91
92
-
The result is correct.
92
+
Il risultato è corretto.
93
93
94
-
...But wait, not so fast.
94
+
...Ma un attimo, non così in fretta.
95
95
96
-
Please note: the `regexp.exec`call starts searching at position`lastIndex`and then goes further. If there's no word at position`lastIndex`, but it's somewhere after it, then it will be found:
96
+
Nota: la chiamata `regexp.exec`inizia la ricerca alla posizione`lastIndex`e poi va oltre. E se non c'è una parola alla posizione`lastIndex`, ma c'è successivamente, allora verrà trovata:
97
97
98
98
```js run
99
99
let str ='let varName = "value"';
100
100
101
101
let regexp =/\w+/g;
102
102
103
103
*!*
104
-
//start the search from position 3
104
+
//inizia la ricerca dalla posizione 3
105
105
regexp.lastIndex=3;
106
106
*/!*
107
107
108
108
let word =regexp.exec(str);
109
-
//found the match at position 4
109
+
//trovato la corrispondenza nella posizione 4
110
110
alert(word[0]); // varName
111
111
alert(word.index); // 4
112
112
```
113
113
114
-
For some tasks, including the lexical analysis, that's just wrong. We need to find a match exactly at the given position at the text, not somewhere after it. And that's what the flag `y` is for.
114
+
Per alcune attività, incluse l'analisi lessicale, è semplicemente sbagliato. Dobbiamo trovare una corrispondenza esattamente nella posizione data nel testo, non da qualche parte. Ed è a questo che serve il flag `y`.
115
115
116
-
**The flag `pattern:y`makes `regexp.exec`to search exactly at position `lastIndex`, not "starting from" it.**
116
+
**Il flag `pattern:y`fa in modo che `regexp.exec`cerchi esattamente nella posizione `lastIndex`, non "a partire da" essa**
117
117
118
-
Here's the same search with flag `pattern:y`:
118
+
Ecco la stessa ricerca con il flag `pattern:y`:
119
119
120
120
```js run
121
121
let str ='let varName = "value"';
122
122
123
123
let regexp =/\w+/y;
124
124
125
125
regexp.lastIndex=3;
126
-
alert( regexp.exec(str) ); // null (there's a space at position 3, not a word)
126
+
alert( regexp.exec(str) ); // null (c'è uno spazio alla posizione 3, non una parola)
127
127
128
128
regexp.lastIndex=4;
129
-
alert( regexp.exec(str) ); // varName (word at position 4)
129
+
alert( regexp.exec(str) ); // varName (parola nella posizione 4)
130
130
```
131
131
132
-
As we can see, regexp `pattern:/\w+/y`doesn't match at position `3` (unlike the flag `pattern:g`), but matches at position`4`.
132
+
Come possiamo notare, la regexp `pattern:/\w+/y`non trova corrispondenze alla posizione `3` (a differenza del flag `pattern:g`), ma trova corrispondenza alla posizione`4`.
133
133
134
-
Not only that's what we need, there's an important performance gain when using flag `pattern:y`.
134
+
Non solo è quello di cui abbiamo bisogno, c'è anche un importante guadagno di prestazioni quando si usa il flag `pattern:y`.
135
135
136
-
Imagine, we have a long text, and there are no matches in it, at all. Then a search with flag `pattern:g`will go till the end of the text and find nothing, and this will take significantly more time than the search with flag `pattern:y`, that checks only the exact position.
136
+
Immaginate, un testo corposo, senza corrispondenze. Quindi una ricerca con il flag `pattern:g`scorrerà tutto il testo senza trovare nulla, e questo richiederà significativamente più tempo della ricerca con il flag `pattern:y`, che controlla solo alla posizione esatta.
137
137
138
-
In tasks like lexical analysis, there are usually many searches at an exact position, to check what we have there. Using flag `pattern:y`is the key for correct implementations and a good performance.
138
+
Nell'analisi lessicale, di solito, si effettuano molte ricerche in base a posizioni esatte, per verificarne il contenuto. L'uso del flag `pattern:y`è la chiave per implementazioni corrette e con buone prestazioni.
0 commit comments