2009-08-19 5 views
31

एक निश्चित चर में एक सापेक्ष पथ या एक पूर्ण पथ हो सकता है। किसी भी तरह से, मैं चर से फ़ाइल नाम खींचने में सक्षम होने की जरूरत है:जावास्क्रिप्ट/jquery का उपयोग कर फ़ाइल नाम को यूआरएल से कैसे खींचें?

http://www.somesite.com/dir1/dir2/filename.gif 
/dir1/dir2/filename.gif 

निर्देशिका संरचना भी मनमाने ढंग से है। तो मूल रूप से उपर्युक्त यूआरएल के ऊपर (arbirtrary निर्देशिका संरचना के साथ) मुझे 'filename.gif' खींचने की जरूरत है।

[^/]+\.[^/]+ 

हालांकि कि हर संभव मामले को कवर नहीं करता है, यह ज्यादातर मामलों के लिए उपयुक्त से अधिक होना चाहिए: धन्यवाद अग्रिम में

+2

भी देखें संभव डुप्लिकेट: [? कैसे एक पूर्ण पथ जावास्क्रिप्ट का उपयोग करने से फ़ाइल नाम पाने के लिए] (http://stackoverflow.com/questions/423376/how-to-get-the-file-name -फ्रम-ए-फुल-पथ-उपयोग-जावास्क्रिप्ट) – Bergi

उत्तर

1

एक रेगुलर एक्सप्रेशन का उपयोग करें, इन पंक्तियों के साथ कुछ चाल करना चाहिए। आप इन का उपयोग कर सकते हैं:

var url = window.location.href; 
var regex = new RegExp("[^/]+\.[^/]+"); 
var fileName = regex.exec(url); 

आशा है कि

+2

नहीं। इसका परिणाम '[" http: "]' के एक मैच में होता है। –

6

मैं रेगुलर एक्सप्रेशन का उपयोग करेंगे मदद करता है।

[^/]*$ 

यह अंत तक अंतिम स्लैश के बाद सब कुछ चुनता है। आप अलग से एक्सटेंशन का चयन करने के लिए इसे विस्तार कर सकते हैं:

/([^/]*?)(\.[^\./]*)?$ 
+1

मुझे यह रेगेक्स स्पष्ट लगता है, लेकिन यह जावास्क्रिप्ट में लिखा नहीं गया है ... यहां पूरी बात है: 'url.match (' [^ /] * $ ') [0] ' – Jason

52
var index = yourstring.lastIndexOf("/") + 1; 
var filename = yourstring.substr(index); 
+0

क्या यह रेगेक्स का उपयोग करने से तेज़ है? –

+7

मुझे नहीं पता लेकिन एक मानव – Gregoire

+2

द्वारा अधिक समझ में आता है मुझे 'filename.gif' के बजाय'/filename.gif' मिल रहा है। सबस्ट्र को कॉल करने से पहले इंडेक्स को 1 से बढ़ाया जाना चाहिए। –

25

छोटा रास्ता

var filename = window.location.href.substr(window.location.href.lastIndexOf("/")+1); 
+3

स्लैश के बिना: 'var filename = window.location.href.substr (window.location.href.lastIndexOf ("/") + 1); ' – kflorence

+0

फिक्स्ड, धन्यवाद। – Rodrigo

+0

पठनीय। धन्यवाद! – jasonflaherty

2
// Extract filename from current page. 
var filePath = window.location.pathname; 
var fileName = filePath.substr(urlPath.lastIndexOf("/") + 1); 
2

अपने उदाहरण के लिए, खोज सबस्ट्रिंग शायद आपका सबसे अच्छा विकल्प हो जाएगा।

हालांकि, अगर आपकी यूआरआई वास्तव में काफी जटिल हैं, तुम कोशिश स्टीवन Levithan के parseUri सकता है:

parseUri(uri).file; 

यह 2 तरीके हैं और प्रत्येक quirks के अपने हिस्से है, तो check out the demo कर लें।

5
var path = window.location.pathname; 
var filename = path.match(/.*\/([^/]+)\.([^?]+)/i)[1]; 

इस मामले में इसका उपयोग करें कि आप नहीं चाहते हैं कि आपकी क्वेरी स्ट्रिंग आपके फ़ाइल नाम का हिस्सा हो (जो आप शायद नहीं करते)।

+0

बढ़िया है, लेकिन क्या आप अंत में पैरामीटर को काटने की कार्यक्षमता का विस्तार कर सकते हैं, जिसमें "**? **" भी शामिल है? धन्यवाद –

+1

@ जेम्स कैज़ेटाटा: शायद आपकी ज़रूरतों के लिए ओवरकिल करें, लेकिन यह आपको यूआरआई से जो कुछ चाहिए उसे प्राप्त करेगा: https://gist.github.com/1169555 – kflorence

1
var filename = /[^\\\/:*?"<>|\r\n]+$/i.exec(window.location.href)[0]; 
0

धन्यवाद सैम देंग, काम करने के लिए लगता है, लेकिन आप एक टाइपो है मेरे दोस्त:

// Extract filename from current page. 
var filePath = window.location.pathname; 
var fileName = filePath.substr(filePath.lastIndexOf("/") + 1); 
+0

आपकी मदद के लिए धन्यवाद, लेकिन आपको इसे एक टिप्पणी के रूप में छोड़ देना चाहिए एक नया पोस्ट करने के बजाय सापेक्ष उत्तर (भविष्य में आप दूसरों के उत्तरों के लिए एक संपादन का सुझाव देने में सक्षम होंगे) – Luca

3
var URL = window.location.pathname; // Gets page name 
var page = URL.substring(URL.lastIndexOf('/') + 1); 
alert(page); 
0

आप यूआरएल इस तरह है:

yourdomain.com/app_dev.php 
yourdomain.com/app_dev.php/article/2 

और आप करना चाहते हैं बस फ़ाइल नाम (/app_dev.php) खींचें ताकि आप अपने होमपेज से लिंक कर सकें:

var filename = window.location.pathname.substr(0, window.location.pathname.indexOf("/", 1)); 
window.location = filename; 
1
var pathnameArray = window.location.pathname.split("/"); 
    var nameOfFile = pathnameArray[pathnameArray.length -1]; 

शायद कुछ ओवरहेड है जो मुझे पता नहीं है कि सबस्ट्रेट का उपयोग करके सरणी बनाम बनाम विचार करने पर विचार करने के बारे में मुझे पता नहीं है। तो शायद यह एक अच्छा जवाब नहीं है बल्कि एक ही समस्या को हल करने के लिए एक अलग दृष्टिकोण है।

संबंधित मुद्दे