Se la tua regex è globale e stai catturando, devi usare exec. Match non restituirà tutte le tue acquisizioni.
Match funziona alla grande per quando si esegue solo la corrispondenza (non l'acquisizione). Lo esegui una volta e fornisce un array di tutte le corrispondenze. (anche se se la regex non è globale, match mostrerà la corrispondenza seguita dalle acquisizioni)
Exec è ciò che usi durante l'acquisizione e ogni volta che viene eseguito fornisce la corrispondenza, seguita dalle acquisizioni. (match si comporterà in modo da fornire la corrispondenza completa seguita da acquisizioni, solo quando la regex non è globale).
Un altro utilizzo con Exec è ottenere l'indice o la posizione di una corrispondenza. Quando hai una variabile per la tua regex, puoi usare .lastIndex e ottenere la posizione della corrispondenza. Un oggetto regex ha .lastIndex e l'oggetto regex è ciò su cui esegui .exec. La corrispondenza del punto viene eseguita su una stringa e non sarai in grado di eseguire il punto oggetto regex lastIndex
Una stringa ha la funzione match, a cui viene passata una regex. E una regex, ha la funzione exec e viene passata una stringa
eseguito più volte. partita che corri una volta
È bene usare match quando non si acquisisce e durante l'acquisizione è possibile utilizzare exec che è più potente in quanto è utile per ottenere acquisizioni, ma se si utilizza match durante l'acquisizione, vedere che mostra acquisizioni quando la regex non è globale, ma non non mostra le catture quando la regex è globale.
> "azb".match(/a(z)b/);
[ "azb", "z" ]
> "azb".match(/a(z)b/g);
[ "azb" ]
>
Un'altra cosa è che se usi exec, nota che viene chiamato nella regex, quindi se hai usato una variabile per l'espressione regolare, hai più potere
Non ottieni le corrispondenze quando non usi la variabile per la regex, quindi usa la variabile per la regex, quando usi exec
> /./g.exec("abc")
[ "a" ]
> /./g.exec("abc")
[ "a" ]
> /./g.exec("abc")
[ "a" ]
>
> /[a-c]/g.exec("abc")
[ "a" ]
> /[a-c]/g.exec("abc")
[ "a" ]
>
> var r=/[a-c]/g
> r.exec("abc")
[ "a" ]
> r.exec("abc")
[ "b" ]
> r.exec("abc")
[ "c" ]
> r.exec("abc")
null
>
E con exec, puoi ottenere l '"indice" della partita
> var r=/T/g
> r.exec("qTqqqTqqTq");
[ "T" ]
> r.lastIndex
2
> r.exec("qTqqqTqqTq");
[ "T" ]
> r.lastIndex
6
> r.exec("qTqqqTqqTq");
[ "T" ]
> r.lastIndex
9
> r.exec("qTqqqTqqTq");
null
> r.lastIndex
0
>
Quindi, se vuoi gli indici o la cattura, usa exec (tieni presente che, come puoi vedere, con l '"indice", l' "indice" che fornisce è davvero un'ennesima occorrenza, conta da 1. Quindi potresti derivare il corretto index sottraendo 1. E come puoi vedere dà 0 - lastIndex di 0 - per non trovato).
E se vuoi estendere la corrispondenza, puoi usarla quando stai catturando, ma non quando la regex è globale, e quando lo fai per quello, allora i contenuti dell'array non sono tutte le corrispondenze, ma sono il pieno partita seguita dalle catture.
execper ottenere tutte le sotto-selezioni.