Cercavo questa partitaPerché String.match() non produce risultati attesi quando è presente un flag globale?
'/links/51f5382e7b7993e335000015'.match(/^\/links\/([0-9a-f]{24})$/g)
e ottenuto:
['/links/51f5382e7b7993e335000015']
mentre mi aspettavo:
['/links/51f5382e7b7993e335000015', '51f5382e7b7993e335000015']
ho avuto fortuna fino a quando ho rimosso il flag globale, che ho fatto Non pensare che possa influire sui risultati dei miei risultati!
Con il flag globale rimosso,
'/links/51f5382e7b7993e335000015'.match(/^\/links\/([0-9a-f]{24})$/)
prodotto:
[ '/links/51f5382e7b7993e335000015',
'51f5382e7b7993e335000015',
index: 0,
input: '/links/51f5382e7b7993e335000015' ]
che è fresco, ma leggendo la documentazione che non riesco a capire:
- Perché la prima modulo non ha funzionato
- Perché la bandiera globale ha interferito con lo
()
corrispondenti - Come ottenere il mio risultato previsto senza le
index
einput
proprietà
On JavaScript Regex and Submatches la risposta in alto dice:
Uso partita di String() la funzione non restituirà catturato gruppi se la il modificatore globale è impostato, come hai scoperto.
Tuttavia,
> 'fofoofooofoooo'.match(/f(o+)/g)
["fo", "foo", "fooo", "foooo"]
sembra produrre gruppi catturati bene.
Grazie.
Ho modificato la domanda per risolvere il possibile problema duplicato. –
È un duplicato, ma +1 per "Ho provato ..., ho ottenuto ..., mi aspettavo ...". Vorrei che più domande fossero così. – FakeRainBrigand
Hah! Grazie ... guarderò di nuovo, e più attentamente, alla pagina collegata. –