Jeśli twoje wyrażenie regularne jest globalne i przechwytujesz, musisz użyć exec. Mecz nie zwróci wszystkich zdobytych punktów.
Dopasowywanie świetnie sprawdza się podczas dopasowywania (nie do przechwytywania). Uruchamiasz go raz i daje tablicę wszystkich dopasowań. (chociaż jeśli wyrażenie regularne nie jest globalne, dopasowanie pokaże dopasowanie, po którym nastąpi przechwycenie)
Exec jest tym, czego używasz podczas przechwytywania i za każdym razem, gdy jest wykonywany, daje dopasowanie, a następnie przechwytywanie. (dopasowanie będzie zachowywać się w sposób zapewniający pełne dopasowanie, po którym nastąpi przechwycenie, tylko wtedy, gdy wyrażenie regularne nie jest globalne).
Innym zastosowaniem z Exec, jest pobranie indeksu lub pozycji dopasowania. Kiedy masz zmienną dla swojego wyrażenia regularnego, możesz użyć .lastIndex i uzyskać pozycję dopasowania. Obiekt regex ma .lastIndex, a obiekt regex jest tym, co robisz .exec. Dopasowywanie kropek jest wykonywane na łańcuchu i nie będzie można wtedy wykonać obiektu regex dot lastIndex
Łańcuch ma funkcję dopasowania, do której przekazywane jest wyrażenie regularne. A regex ma funkcję exec i jest przekazywany ciąg
exec, uruchamiasz wiele razy. dopasować biegasz raz
Dobrze jest użyć dopasowania, gdy nie przechwytujesz, a podczas przechwytywania możesz użyć exec, które jest potężniejsze, ponieważ jest dobre do przechwytywania, ale jeśli użyłeś dopasowania podczas przechwytywania, zobacz, że pokazuje przechwytywania, gdy wyrażenie regularne nie jest globalne, ale tak nie jest nie pokazuje ujęć, gdy wyrażenie regularne jest globalne.
> "azb".match(/a(z)b/);
[ "azb", "z" ]
> "azb".match(/a(z)b/g);
[ "azb" ]
>
Inną rzeczą jest to, że jeśli używasz exec, uwaga, która jest wywoływana na wyrażeniu regularnym, to jeśli użyłeś zmiennej dla tego wyrażenia regularnego, masz większą moc
Nie otrzymujesz dopasowań, jeśli nie używasz zmiennej dla wyrażenia regularnego, więc użyj zmiennej dla wyrażenia regularnego, gdy używasz 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
>
Za pomocą exec możesz uzyskać „indeks” dopasowania
> 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
>
Więc jeśli chcesz indeksować lub przechwytywać, użyj exec (pamiętaj, że jak widzisz, z "indeksem", "indeks", który podaje, jest tak naprawdę n-tym wystąpieniem, liczy się od 1. Więc możesz wyprowadzić właściwe indeks przez odjęcie 1. I jak widać daje 0 - lastIndex 0 - dla nie znaleziono).
A jeśli chcesz dopasować rozciąganie, możesz go użyć podczas przechwytywania, ale nie wtedy, gdy wyrażenie regularne jest globalne, a kiedy to robisz, to zawartość tablicy nie jest wszystkimi dopasowaniami, ale są pełne mecz, po którym następuje przechwytywanie.
exec
aby uzyskać wszystkie pod-selekcje.