2011-11-08 28 views
23

Có văn bản này:Regex để phù hợp với tên tập tin vào cuối URL

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

Và các văn bản khác như thế này mà cuối cùng 1 thể được bất kỳ số nào khác và cuối cùng 44 thể được bất kỳ số khác là tốt, tôi cần một regex sẽ khớp với /1t44.jpg. Mọi thứ tôi đã thử cho đến nay (/.+?\.([^\.]+)$) khớp với dấu gạch chéo đầu tiên (//img.oo.com.au/prod/CRWWBGFWG/1t44.jpg).

Tôi đang sử dụng javascript để mọi thứ hoạt động trên RegexPal sẽ hoạt động.

Xin cảm ơn trước.

+0

là bạn đang cố gắng khớp với bất kỳ tên tệp nào ở cuối đường dẫn (vì đó là những gì regex của bạn cố gắng thực hiện) hoặc tên tệp theo mẫu 'XtXX.jpg'? –

+0

@Dmitry: Tôi thực sự đang cố tìm regex phù hợp với tên tập tin ở cuối. – Juan

Trả lời

26

Nếu bạn muốn kết hợp một tên tập tin với một extenstion tập tin rất cụ thể, bạn có thể sử dụng một cái gì đó như thế này:

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

này phù hợp:

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

Hoặc, nếu bạn thực sự chỉ muốn tên tệp (bất kỳ sau dấu gạch chéo cuối cùng với bất kỳ đuôi tệp nào), thì bạn có thể sử dụng:

/\/[^\/]+$/ 

Th được trận đấu:

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

Trong chuỗi mẫu của bạn của http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg, cả hai sẽ phù hợp /1t44.jpg. Việc đầu tiên rõ ràng là nhiều hạn chế hơn vì nó đòi hỏi một định dạng cụ thể của tên tập tin. Thứ hai khớp với bất kỳ tên tệp nào.


Các lựa chọn khác. Trong quá trình phát triển node.js, bạn có thể sử dụng path module và sử dụng path.parse() để phá vỡ đường dẫn đến tất cả các thành phần khác nhau của nó.

Và, có nhiều thư viện khác nhau được viết cho trình duyệt cũng sẽ phá vỡ đường dẫn vào các thành phần của nó.

+1

Vâng, điều cuối cùng là những gì tôi thực sự muốn. Các công trình khác nhưng điều cuối cùng này tôi có thể học được điều gì đó từ :). – Juan

+0

@RamtinSoltani - Đọc nhận xét từ OP ngay trước bạn và xem xét tùy chọn thứ hai mà tôi cung cấp và thấy rằng OP chấp nhận câu trả lời này như những gì họ muốn. Bạn có thực sự sẽ downvote này mặc dù thực tế là OP cho biết tôi cung cấp cho họ những gì họ cần? – jfriend00

+0

@ jfriend00 Không phải là câu trả lời cho "Regex phù hợp với lần xuất hiện cuối cùng của một nhân vật". –

44

Dưới đây là một Regex đơn giản mà sẽ phù hợp với tất cả mọi thứ sau khi người cuối cùng /:

/[^/]*$ 
+5

chỉ là tôi đang tìm kiếm! : D, nhưng tôi cần phải thoát khỏi /,/[^ \ /] * $ –

+0

Giải pháp này là mục đích thanh lịch và chung chung. –

3

Tất nhiên bạn không cần phải sử dụng một biểu thức chính quy to split a stringpop the last part:

var str="http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg"; 
var parts = str.split("/"); 
document.write(parts.pop() + "<br />"); 
9

Như Johnsyweb nói , một diễn đạt thường xuyên không thực sự cần thiết ở đây. AFAIK cách nhanh nhất để làm điều này là với lastIndexOfsubstr.

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

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

0

Đây là dành cho java trên máy linux. Nó lấy phần cuối cùng của đường dẫn tệp để nó có thể được sử dụng để tạo khóa tệp.

// 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"; 
} 

Một chút khác với câu hỏi ban đầu, tôi biết. Nhưng tôi hy vọng điều này sẽ giúp những người khác bị mắc kẹt với cùng một vấn đề mà tôi có.

Chia sẻ và thưởng thức.

0

Dựa trên câu trả lời của Scott, hãy thử này: (JavaScript)

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

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

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

này cũng có thể được xuất hiện cho đường dẫn file Windows/Nix, để trích xuất tên file hoặc đường dẫn tập tin:

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

c:\Program Files\test.js => \test.js 
Các vấn đề liên quan