Newsgroup: it.comp.lang.javascript
Titolo: estrarre nome file

Salve a tutti.
Se io ho un path del tipo:
x:\aaa\bbb\ccc.dd\eeee\pippo.xyz.mno
è possibile, tramite un'unica espressione regolare
estrarre il nome del file, cioè in questo caso
pippo.xyz
 ?
Ho provato a studiarci su un po', ma non riesco
a capire come cercare l'ultima occorrenza di \ o di .
Esiste un sito dove sono mostarti esempi di
regular expressions.
Grazie per le eventuali risposte, Massimo.

 estrarre il nome del file, cioè in questo caso
perché regexp?
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:lastIndexOf
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:String:substr
combinandole:
tuastringa.substr(tuastringa.lastIndexOf("\\")+1);
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

 regular expressions.
C'è un sito dedicato
http://www.regular-expressions.info/javascript.html
molto utile.
Le regexp risolvono molti problemi in una sola riga di codice, l'unica
condizione è di avere le idee chiare prima di scrivere la regexp, vale
a dire che bisogna avere chiaro il pattern da cercare. Il tuo caso è
un pò strano, il nome del file dovrebbe essere pippo.xyz.mno ma se
imposti il criterio "barra nomefile punto estensione" dove estensione
ha un massimo di tre caratteri il pattern da inserire è il seguente
/\\\w*.\w{3}/
se vuoi che la ricerca venga fatta solo alla fine della stringa allora
il pattern sarà:
/\\\w*.\w{3}$/
Ciao
Oreste

 /\\\w*.\w{3}$/
come sopra: così a naso sarà
 /\\\w+\.\w{2,3}$/
inoltre la domanda è:
"
x:\aaa\bbb\ccc.dd\eeee\pippo.xyz.mno
è possibile, tramite un'unica espressione regolare
estrarre il nome del file, cioè in questo caso
pippo.xyz
 ?
" 
se ha scritto giusto ha uno strano nome del file pippo.xyz.mno e vuole solo
pippo.xyz
, questa regexp estrae invece xyz.mno.
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

Oreste ha scritto:

Grazie molte, Oreste! Buon Natale a tutti.

Si, condivido tua precisazione. Come scrivevo bisogna definire bene a
parole il criterio e dopo si può "costruire" il pattern. Il mio ero
solo un esempio.


 
pippo.xyz
 ?
-CUT-
Questa lo fa:
replace(/^[\w\\:]+\.[\w]+\\\w+\\/,"").replace(/\.\w+$/,""));
-- 
                 __,_,_,___)        _______
    * b *      (--| | |           (--/    ),_)        ,_)
  *   y   *       | | |  _ ,_,_      |     |_ ,_ ' , _|_,_,_, _  ,
*   Piero   *   __| | | (/_| | (_|   |     | ||  |/_)_| | | |(_|/_)___,
 A U G U R A   (      |___,   ,__|   \____)  |__,           |__, 

 come sei complicato... :-P    replace(/^.*\\([^\\]+)$/,"$1")
Perfetto, comunque serve il secondo replace per avere 
pippo.xyz
 :)
-- 
    * b *     ,_)                   __,_,__)          _,   ,__)
  *   y   *   |_   _   _   _      (--| |  _         (--|  |  _   _  ,_
*   Piero   * | | (_| |_) |_) (_|  __| | (/_ \_\/_/    '\_| (/_ (_| |
 A U G U R A    |_,   |   |   ,_| (    |___,          ,___| 

> Perfetto, comunque serve il secondo replace per avere 
pippo.xyz
 :)
Non lo risolvi con un secondo replace, quello che manca è il criterio
esatto di partenza. Per esempio: il file è definito da un nome
maggiore di tre caratteri ed una estensione di tre caratteri. Se però
il nome può essere di tre caratteri non lo risolvi, perchè c'è una
contraddizione.
Nell'esempio tu hai pippo.xyz.abc in questo esempio devi spiegare
perchè il nome del file non potrebbe essere xyz.abc invece di
pippo.xyz
Se il criterio è chiaro una regexp sarà sufficiente. Le regexp
nidificate sono, nella maggior parte dei casi, sospette. Vale a dire
che c'è il sospetto di non sapere bene cosa si vuole alla fine, bensì
si va a tentativi.
Insomma le regexp a colpo di sedere vs le vere regexp.

 beh... in realtà no, non serve :-)
Provato con IE, Opera e FF.
Senza il secondo replace restituisce pippo.xyz.mno come la mia prima 
incasinata espressione. :)
-- 
    * b *           .\/.      .\/.                     .\/.      .\/.
  *   y   *       _\_}{_/_  _\_}{_/_    B U O N E    _\_}{_/_  _\_}{_/_
*   Piero   *      / }{ \    / }{ \     F E S T E     / }{ \    / }{ \
                    '/\'      '/\'                     '/\'      '/\' 

 contraddizione.
-CUT-
Ma l'hai provato?
Puoi variare il numero dei caratteri come vuoi, sia al nome del file che 
alle due estensioni, ma ottieni sempre: nomedelfile.primaestensione.


 replace(/^.*\\([^\\]+)\.([^.\\]+)$/,"$1")
OK, sei un mostro! 8-)
Io sono un dilettante che lo fa solo per diletto. :)
-- 
    * b *     ,_)                   __,_,__)          _,   ,__)
  *   y   *   |_   _   _   _      (--| |  _         (--|  |  _   _  ,_
*   Piero   * | | (_| |_) |_) (_|  __| | (/_ \_\/_/    '\_| (/_ (_| |


 considerare la possibilità di una estensione mancante:
un momento, la sintassi delle regexp javascript proviene dal Perl, non
gli manca niente.

 nessun mostro :-)
Questo è il punto: tu sei un professionista, io un dilettante; mi son 
dovuto arrampicare sugli specchi per buttar giù quella regexp. :-/
-CUT-


 dovuto arrampicare sugli specchi per buttar giù quella regexp. :-/
Cosa c'entra professionista o dilettante, uno studente non
professionista può benissimo buttar giù una regexp complicata, basta
studiarsi la documentazione, si tratta di due, massimo tre pagine A4.
Quello che conta è avere le idee chiare fin dall'inizio, un minimo di
metodo, scrivere il criterio in buon italiano (o altra lingua) e poi
tradurlo in codice.
Se fai lo sforzo di scrivere il criterio in italiano, poi il codice
corretto lo trovi anche tu con la documentazione.

 corretto lo trovi anche tu con la documentazione.
Beh, io non la vedo così semplice. Forse perché le regexp le trovo 
ostiche?
Al contrario, per te sarà molto semplice buttar giù una regexp per 
estrarre 
www.pippo.it
 da questa stringa:
<!-- saved from url=(0020)
http://www.pippo.it/
 -->
P.S. Un grazie a Marco che mi ha fatto imparare una cosa nuova. :-)


 uh? dici a me?
Certo. :-)


 chiamare per nome su usenet :-)
:-D


 se oltre al nome server trovi un path, cosě prendi anche quello.
Non capisco. Mi faresti un esempio?


 <!-- saved from url=(0020)
http://www.pippo.it/foo/bar/
 -->
Ora ho capito cosa intendi. ^__^
Perň questo esula dal contesto, che certamente prevede variazioni nel 
testo, ma sempre riconducibili all'esempio (
www.pippo.it/
).
Ovvio che se la metti cosě, lo spazio nella sotto-espressione deve 
essere sostituito dalla slash per matcharne la prima ricorrenza ed 
eliminare il resto, tuttavia se prevedo di estrarre tutto il link la tua 
regexp non lo fa. :-P
In questo caso ritorna lo spazio: replace(/.*\/\/([^ ]+)\/.*/,"$1") :-)
