E' possibile creare un'espressione regolare che quando viene eseguita mi salva delle variabili in un' array?
Per interdeci, quello che in php sarebbe
Codice PHP:
preg_match("/(?<nome>.*)/", "Nicolò");
E' possibile creare un'espressione regolare che quando viene eseguita mi salva delle variabili in un' array?
Per interdeci, quello che in php sarebbe
Codice PHP:
preg_match("/(?<nome>.*)/", "Nicolò");
No
Mi spiace ma JavaScript non supporta la cattura di gruppi nominati. Puoi usare dei gruppi numerati ed eventualmente decidere di escludere dalla cattura quelli che non ti servono, inserendo ?: all'inizio del gruppo.
Se ti serve necessariamente utilizzare gruppi nominati, sul web puoi trovare script che emulano quel metodo.
Ad ogni modo, l'equivalente del php, è il metodo match() che restituisce un array delle occorrenze trovate.
Installa Forum HTML.it Toolset per una fruizione ottimale del Forum
Boh, grazie...
Ma match non è l'equivalente di preg_match_all ?
Ultima modifica di tampertools; 25-06-2014 a 10:29
No
Non mi sembri convinto. Se ti serve qualcosa di particolare puoi spiegare cosa devi ottenere. Una soluzione si trova sicuramente.Boh, grazie...
Che io sappia, dipende sostanzialmente dalla presenza, o no, dall'opzione "g" (ricerca globale) nel pattern. In PHP non esiste questa opzione. Il compito viene affidato alle due diverse funzioni.Ma match non è l'equivalente di preg_match_all ?
In JavaScript, il metodo match(), senza l'opzione "g", interrompe la ricerca alla prima occorrenza trovata e restituisce un array con un solo elemento (o null se non trova niente). Possiamo dire che equivalga a preg_match.
Se però aggiungi l'opzione "g" al pattern, allora la ricerca viene eseguita fino all'ultima occorrenza e restituisce un array di tutte le occorrenze trovate (o null se non trova niente). Possiamo dire che equivalga a preg_match_all.
codice:alert('Ciao Mondo'.match(/o/)); // => o alert('Ciao Mondo'.match(/o/g)); // => o,o,o
Ultima modifica di KillerWorm; 25-06-2014 a 13:29
Installa Forum HTML.it Toolset per una fruizione ottimale del Forum
Visto che secondo me è meglio reinventare la ruota (solo quando non è troppo grande), me lo sono scritto da solo il polyfiller
(Solo che anziché String.match(RegExp) l'ho fatto RegExp.exec(String): è la stessa cosa, no?)
Che ne pensi?
codice:var namedRegExp = function (expression, flags) { var __namedGroups = [], __isNamed = [], exp; expression = expression.replace(/\((\?(?:P?<([^>]+)>|'([^']+)'))?/g, function (name) { __isNamed.push(/^\(\?(?:P?<([^>]+)>|'([^']+)')$/.test(name)); __namedGroups.push(name.replace(/^\(\?(?:P?<([^>]+)>|'([^']+)')$/, function (name, inAngularBrackets, inSingleQuotes) { return inAngularBrackets || inSingleQuotes; })); return "("; }); exp = new RegExp(expression, flags); exp.exec = function (string) { var executed = RegExp.prototype.exec.call(this, string), i; if (executed === null) { return null; } for (i = 1; i < executed.length; i++) { if (__isNamed[i - 1]) { executed[__namedGroups[i - 1]] = executed[i]; } } return executed; }; return exp; }; console.log(namedRegExp("(?<what>[a-z]+):(?'number'[0-9]+)(.*)").exec("id:64a")); console.log(namedRegExp("(?P<hours>[0-1][0-9]|2[0-3]):(?<minutes>[0-5][0-9])").exec("22:21"));
No
Mi sembra giustoVisto che secondo me è meglio reinventare la ruota (solo quando non è troppo grande), me lo sono scritto da solo il polyfiller
![]()
Sostanzialmente sì, perlomeno in questo caso.(Solo che anziché String.match(RegExp) l'ho fatto RegExp.exec(String): è la stessa cosa, no?)
Ne ho visti diversi in giro, non ho fatto particolari test. Il tuo script mi sembra comunque valido da quel che ho provato. Direi interessanteChe ne pensi?![]()
Installa Forum HTML.it Toolset per una fruizione ottimale del Forum