Newsgroup: it.comp.lang.javascript
Titolo: RegExp di stringa vuota

Salve,
se effettuo una espressione regolare, che cattura normalmente varie 
porzioni di un testo, di una stringa vuota, il risultato è un'array di 
undefined o almeno uno degli elementi deve essere stringa vuota?
Max

 undefined o almeno uno degli elementi deve essere stringa vuota?
dipende da cosa usi, non fai prima a provare?
p.e. match restituisce null se non trova corrispondenze ...
-- 
"e mai che mi sia venuto in mente
 di essere piů ubriaco di voi
 di essere molto piů ubriaco di voi"
									  F.D.A.

 p.e. match restituisce null se non trova corrispondenze ...
L'espressione regolare è:
/^(([^:\/?#]+):)?((\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?)?(#(.*))?/
Si tratta di un'espressione regolare per lo split di una url.
Esempio di url:
http://www.test.com/dir1/dir2/index.htm?q1=0&&test1&test2=value#top
Se provo con una url vuota e cioé "" mi torna allo stesso indice 
undefined... Possibile?
Sarò stanco ma non riesco a rendermi conto...
Max

 undefined... Possibile?
non ho capito la frase "mi torna alla stesso indice undefined", cosa vuol
dire?


 dire?
In genere anche una stringa semplice viene matchata all'indice 6 (come 
path, trattandosi di una URL).
Max

 Ops, scusa. Uso match.
match restituisce null se non trova corrispondenze.
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

 match restituisce null se non trova corrispondenze.
Chiaro. Ma come faccio a fargli trovare una corrispondenza anche se gli 
do una stringa vuota?
Max

 do una stringa vuota?
mi sa che non sto capendo bene la tua necessità ... 
un if(tuastringa.length==0) => risultato else match?
-- 
"Non sai che ci vuol scienza
 ci vuol costanza
 ad invecchiare senza maturità"
									    F.G.

 un if(tuastringa.length==0) => risultato else match?
No, dovrebbe uscire dalla RE... Comunque il match di una stringa vuota 
si ricava con /^$/ ed è un problemino :S
Max

 oppure negando /./
No, non va.

 << ! stringa.match(/./) >> va. Non negare ".", nega la regex.
Si, ma devo ricavare un "" dalla stessa espressione regolare che ho 
scritto in precedenza:
/^(([^:\/?#]+):)?((\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?)?(#(.*))?/
Ossia nella parte ([^?#]*) che non ha il ?, ma lo stesso non mi ricava 
nulla. Si tratta (interamente) di un'espressione regolare per la 
suddivisione di una url e la parte suddetta ne cattura il path (dopo il 
il dominio fino a prima della query e fragment).
:(
Max

 $7 => anchor
La versione che ho dato io, e che è presa dalla classe URI di Java, 
assolve a dei particolari doveri. In un certo contesto la classe 
controlla il match precedente per tornare stringa vuota al posto di 
null. E' il caso ad esempio di query e fragment che possono assumere la 
parte di "dati" vuota e cioé avere solo il "?" o il "#".
Come vedi tutte le porzioni possono essere anche non presenti tranne il 
path. La classe lavora con Matcher. In quel caso probabilmente il path è 
sempre "" e quindi l'intero URI si può inizializzare come "" e non null 
come mi grazia il Javascript.
Non ho tempo di provare ora. Ma la versione che hai scritto tu, se la 
stringa da matchare è "", il path è ""?
Thanks,
Max