2011-11-08 11 views
23

Mając ten tekst:Regex dopasować nazwę pliku na końcu adresu URL

http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg 

i inne teksty jak ten, w którym ostatni 1 może być dowolny inny numer, a ostatni 44 może być dowolny inny numer, jak dobrze, muszę wyrażenie regularne, które będzie pasowało do /1t44.jpg. Wszystko, co do tej pory wypróbowałem (/.+?\.([^\.]+)$) mecze z pierwszego ukośnika (//img.oo.com.au/prod/CRWWBGFWG/1t44.jpg).

Używam javascript, więc cokolwiek działa na RegexPal powinno zrobić.

Z góry dziękuję.

+0

są próbujesz dopasować dowolną nazwę pliku na końcu ścieżki (bo to właśnie próbuje zrobić regex) lub nazwę pliku zgodną z wzorcem "XtXX.jpg"? –

+0

@Dmitry: Naprawdę staram się znaleźć regex, który ogólnie będzie pasował do nazwy pliku na końcu. – Juan

Odpowiedz

26

Jeśli chcesz dopasować nazwę pliku z bardzo specyficznego extenstion plików, można użyć coś takiego:

/\/\dt\d\d\.jpg$/ 

Ten mecz:

a slash 
followed by a digit 
followed by the letter 't' 
followed by two digits 
followed by '.jpg' at the end of the string 

Lub, jeśli naprawdę chcesz nazwa pliku (cokolwiek jest po ostatnim ukośniku z dowolnym rozszerzeniem pliku), możesz użyć:

/\/[^\/]+$/ 

Th są mecze:

a slash 
followed by one or more non-slash characters 
at the end of the string 

W swojej ciąg próbki http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg, zarówno z nich będzie pasował /1t44.jpg. Pierwsza jest oczywiście bardziej restrykcyjna, ponieważ wymaga określonego formatu nazwy pliku. Drugi dopasowuje dowolną nazwę pliku.


Inne opcje. W rozwoju węzła.js można użyć path module i użyć path.parse(), aby podzielić ścieżkę na wszystkie jej różne komponenty.

Istnieje również wiele bibliotek napisanych dla przeglądarki, które rozbijają ścieżkę również na jej składniki.

+1

Tak, ta ostatnia rzecz jest tym, co naprawdę chciałem. Inne prace, ale ten ostatni mogę się czegoś nauczyć od :). – Juan

+0

@RamtinSoltani - Przeczytaj komentarz z OP tuż przed twoim i spójrz na drugą opcję, którą oferuję, i zobacz, że PO zaakceptował tę odpowiedź jako to, czego chcieli. Czy naprawdę zgodzicie się na to, mimo że PO powiedział, że dostarczyłem im tego, czego potrzebowali? – jfriend00

+0

@ jfriend00 Nie jest odpowiedzią na "Regex, który pasuje do ostatniego wystąpienia znaku". –

44

Oto prosty Regex, który będzie pasował do wszystkiego po ostatnim /:

/[^/]*$ 
+5

właśnie szukałem! : D, ale musiałem uciec od /,/[^ \ /]] * $ –

+0

To rozwiązanie jest eleganckie i uniwersalne. –

9

Jak mówi Johnsyweb , regularne ekspresy naprawdę nie są tutaj potrzebne. Najszybszym sposobem, aby to zrobić, jest AFAIK: lastIndexOf i substr.

str.substr(str.lastIndexOf('/')); 
+1

http://programmers.stackexchange.com/questions/223634/what-is-meant-by-now-you-have-two-problems –

0

To jest dla java na maszynie z systemem Linux. Przechwytuje ostatnią część ścieżki pliku, dzięki czemu można go użyć do utworzenia blokady pliku.

// String to be scanned to find the pattern. 
String pattern = ".*?([^/.]+)*$"; 

// Create a Pattern object 
Pattern r = Pattern.compile(pattern); 

// Now create matcher object. 
Matcher match = r.matcher("/usr/local/java/bin/keystore"); 

/** 
* Now you have two matches 
* #0 /usr/local/java/bin/keystore 
* #1 keystore 
*/ 

String fileLock = ""; 

if (match.find()) { 
    fileLock = match.group(1) + ".lock"; 
} 

Trochę inaczej niż pierwotne pytanie, wiem. Mam jednak nadzieję, że pomoże to innym, którzy utknęli z tym samym problemem, który miałem.

Udostępnij i ciesz się.

0

podstawie odpowiedzi Scott, spróbuj tego: (JavaScript)

var url = "http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg"; 

var path   = url.replace(/(.*)([\\\/][^\\\/]*$)/, "$1"); 

var lastElement = url.replace(/(.*)([\\\/][^\\\/]*$)/, "$2"); 

ten może być również dopasowany do ścieżki pliku Windows/Nix, aby wyodrębnić nazwę pliku lub ścieżkę do pliku:

c:\Program Files\test.js => c:\Program Files 

c:\Program Files\test.js => \test.js 
Powiązane problemy