2012-02-20 24 views
12

ho bisogno di estrarre solo il nome del file (senza estensione di file) dal seguente percorso ....Regex per estrarre il nome del file dal percorso

\\my-local-server\path\to\this_file may_contain-any&character.pdf

Ho provato diverse cose, la maggior parte in base al largo di qualcosa come http://regexr.com?302m5 ma non riesco a ottenere là

+3

Quale lingua? Alcune lingue hanno un metodo per analizzare gli URI nella loro libreria standard. –

+0

'. * \\ (. +?) \. Pdf' – kev

+2

Sono scettico che un'espressione regolare sia più veloce di ottenere l'indice dell'ultimo separatore di percorso, ma potrei sbagliarmi. –

risposta

21
^\\(.+\\)*(.+)\.(.+)$ 

Questa espressione regolare è stata testata su questi due esempi:

\ var \ www \ www.example.com \ index.php
\ index.php

primo blocco "(. + \) *" Corrisponde percorso di directory.
Il secondo blocco "(. +)" Corrisponde al nome del file senza estensione.
Il terzo blocco "(. +) $" Corrisponde all'estensione.

4

Prova this:

[^\\]+(?=\.pdf$) 

Si abbina tutto tranne back-slash seguito da .pdf alla fine della stringa.

È anche possibile (e forse è anche meglio) prendere la parte che si desidera nel gruppo di cattura così:

([^\\]+)\.pdf$ 

Ma come si fa riferimento a questo gruppo (la parte tra parentesi) dipende dalla lingua o sapore regexp che stai usando. Nella maggior parte dei casi sarà simile a $1 o \1 oppure la libreria fornirà un metodo per acquisire il gruppo in base al relativo numero dopo la corrispondenza di espressioni regolari.

+0

Dovrebbe essere più simile a '' [^ \\] (. +) \. Pdf $ ' – macduff

+0

@macduff la domanda è anche il percorso o solo il nome del file ..? – noob

+0

Ho capito che era il nome del file, ma non l'estensione o il percorso, scusa se ho frainteso. – macduff

6

Questo otterrà il nome file ma otterrà anche il punto. Potresti voler troncare l'ultima cifra da esso nel tuo codice.

[\w-]+\. 

Aggiornamento

@Geoman se si dispone di spazi nel nome di file, quindi utilizzare il modello modificato di seguito

[ \w-]+\.  (space added in brackets) 

Demo

+0

fallisce: 'c: \ fakepath \ qualche nome file con spaces.png' –

+0

@GeomanYabes risposta aggiornata per l'acquisizione dello spazio nel nome del file –

3

Se qualcuno è alla ricerca di un percorso di Windows assoluto (e il relativo percorso) javascript espressioni regolari in JavaScript per i file:

var path = "c:\\my-long\\path_directory\\file.html"; 


((/(\w?\:?\\?[\w\-_\\]*\\+)([\w-_]+)(\.[\w-_]+)/gi).exec(path); 

uscita è:

[ 
"c:\my-long\path_directory\file.html", 
"c:\my-long\path_directory\", 
"file", 
".html" 
] 
0

Ecco una piccola modifica ad Angelo di eccellente risposta che consente spazi nel percorso, nome file ed estensione nonché parti mancanti:

function parsePath (path) { 
    var parts = (/(\w?\:?\\?[\w\-_ \\]*\\+)?([\w-_ ]+)?(\.[\w-_ ]+)?/gi).exec(path); 
    return { 
     path: parts[0] || "", 
     folder: parts[1] || "", 
     name: parts[2] || "", 
     extension: parts[3] || "", 
    }; 
} 
0

Ecco un'alternativa che funziona su Windows/UNIX:

"^(([A-Z]:)?[\.]?[\\{1,2}/]?.*[\\{1,2}/])*(.+)\.(.+)"

Primo blocco: percorso
Secondo blocco: manichino
terzo blocco: nome del file
quarto blocco: estensione

Tested on:

".\var\www\www.example.com\index.php" 
"\var\www\www.example.com\index.php" 
"/var/www/www.example.com/index.php" 
"./var/www/www.example.com/index.php" 
"C:/var/www/www.example.com/index.php" 
"D:/var/www/www.example.com/index.php" 
"D:\\var\\www\\www.example.com\\index.php" 
"\index.php" 
"./index.php" 
1

Questo è solo un leggero variante @ HMD è così non c'è bisogno di troncare il .

[ \w-]+?(?=\.) 

Demo

Davvero, grazie va a @hmd. Ho solo leggermente migliorato.

0

Questa espressione regolare estrae l'estensione del file, se il gruppo 3 non è nullo è l'estensione.

.*\\(.*\.(.+)|.*$) 
Problemi correlati