2009-02-04 14 views
28

से फ़ाइल नाम पाने के लिए कार्य करते हैं मैं की तरह http://www.example.com/blah/th.htmljs यूआरएल

एक यूआरएल मैं एक जावास्क्रिप्ट समारोह की जरूरत है मुझे उस से 'वें' मूल्य देना पड़ता है।

मेरे सभी यूआरएल में एक ही प्रारूप (2 अक्षर फ़ाइल नाम, .html एक्सटेंशन के साथ) है।

मैं चाहता हूं कि यह एक सुरक्षित कार्य हो, इसलिए यदि कोई खाली यूआरएल में गुजरता है तो यह टूट नहीं जाता है।

मुझे पता है कि लंबाई की जांच कैसे करें, लेकिन मुझे सही से ठीक से जांच करनी चाहिए?

+0

संभावित डुप्लिकेट [कैसे एक पूर्ण पथ जावास्क्रिप्ट का उपयोग करने से फ़ाइल नाम पाने के लिए?] (Https://stackoverflow.com/questions/423376/how-to -get-the-file-name-from-a-full-path-use-javascript) – Liam

उत्तर

19

मिलान फ़ंक्शन का उपयोग करें।

function GetFilename(url) 
{ 
    if (url) 
    { 
     var m = url.toString().match(/.*\/(.+?)\./); 
     if (m && m.length > 1) 
     { 
     return m[1]; 
     } 
    } 
    return ""; 
} 
+8

यह काम नहीं करता है यदि आपके पास फ़ाइल नाम – James

1
<script type="text/javascript"> 
function getFileName(url){ 
    var path = window.location.pathName; 
    var file = path.replace(/^.*\/(\w{2})\.html$/i, "$1"); 
    return file ? file : "undefined"; 
} 
</script> 
2

साथ jQuery का उपयोग करना URL plugin:

var file = jQuery.url.attr("file"); 
var fileNoExt = file.replace(/\.(html|htm)$/, ""); 
// file == "th.html", fileNoExt = "th" 
9

दूसरों की तरह, लेकिन ... मैं टॉम की सरल स्क्रिप्ट का उपयोग किया है - एक पंक्ति,
तो आप फ़ाइल नाम वर उपयोग कर सकते हैं कहीं भी:
http://www.tomhoppe.com/index.php/2008/02/grab-filename-from-window-location/

var filename = location.pathname.substr(location.pathname.lastIndexOf("/")+1); 
+0

में एकाधिक एकाधिक हैं। लंबाई वैकल्पिक है मेरा मानना ​​है: location.pathname। substr (location.pathname.lastIndexOf ("/") + 1) –

3

मैं substring कार्यात्मक उपयोग करेंगे 0 lastIndexOf के साथ संयुक्त। यह उन में अवधि के साथ फ़ाइल नामों की अनुमति देगा उदा। http://example.com/file.name.txt दिया गया यह स्वीकृत उत्तर के विपरीत file.name देता है जो file देगा।

function GetFilename(url) 
{ 
    if (url) 
    { 
     return url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf(".")); 
    } 
    return ""; 
} 
87
var filename = url.split('/').pop() 
+7

अब तक का सबसे सरल और सर्वोत्तम उत्तर। –

+7

क्या होगा अगर पीछे पैरामीटर पैरामीटर हैं? –

+1

यह यूआरएल खंड आईडी (यानी # आईडी) – benjineer

0
इसी तरह क्या @ user2492653 सुझाव को

, अगर सब आप चाहते हैं Firefox जैसे फ़ाइल का नाम आप देता है, तो आप विभाजन() विधि है, जो घटकों के एक सरणी में स्ट्रिंग टूट जाता है, तो आपको इसे अंतिम सूचकांक को पकड़ने की ज़रूरत है। { "C:", "fakepath", "test.csv"} में /fakepath/test.csv:

var temp = url.split("//"); 
if(temp.length > 1) 
return temp[temp.length-1] //length-1 since array indexes start at 0 

यह मूलतः सी टूट जाएगा

1

उन
तरह lenghty यूआरएल के लिए काम नहीं करेगा "/my/folder/questions.html#dssddsdsd?toto=33 & dududu = podpodpo"

यहाँ मैं "questions.html" प्राप्त करने की उम्मीद। तो एक संभव (धीमा) समाधान

fname=function(url) 
{ return url?url.split('/').pop().split('#').shift().split('?').shift():null } 

नीचे के रूप में है तो आप उस परीक्षण कर सकते हैं किसी भी मामले में आप केवल फ़ाइल नाम पाने में।

fname("/my/folder/questions.html#dssddsdsd?toto=33&dududu=podpodpo") 
-->"questions.html" 
fname("/my/folder/questions.html#dssddsdsd") 
-->"questions.html" 
fname("/my/folder/questions.html?toto=33&dududu=podpodpo") 
"-->questions.html" 

(and it works for null) 

0

मेरी 2 सेंट

LastIndexOf ("/") अपने आप में विधि नीचे गिर जाता है, तो querystrings शामिल "/"

(मैं एक तेजी से या होशियार समाधान को देखने के लिए प्यार होता है)

हम सभी जानते हैं कि उन्हें %2F के रूप में एन्कोड किया जाना चाहिए, लेकिन यह समस्याएं पैदा करने के लिए केवल एक अनचाहे मूल्य लेगा।

इस संस्करण में सही ढंग से querystrings में संभालती है/के और। पर कोई निर्भरता यूआरएल में की है

function getPageName() { 
    //#### Grab the url 
    var FullUrl = window.location.href; 

    //#### Remove QueryStrings 
    var UrlSegments = FullUrl.split("?") 
    FullUrl = UrlSegments[0]; 

    //#### Extract the filename 
    return FullUrl.substr(FullUrl.lastIndexOf("/") + 1); 
} 
1

इस

url.substring(url.lastIndexOf('/')+1, url.length) 
0
function getFileName(url) { 
    // Remove the QueryString 
    url = url.replace(/\?.*$/, ''); 
    // Extract the last part 
    return url.split('/').pop(); 
} 
3

एक regex समाधान जो के लिए खातों का प्रयास करें यूआरएल क्वेरी और हैश पहचानकर्ता:

function fileNameFromUrl(url) { 
    var matches = url.match(/\/([^\/?#]+)[^\/]*$/); 
    if (matches.length > 1) { 
    return matches[1]; 
    } 
    return null; 
} 

जेएसफ़ील्ड here

+0

में मिलेगा रेगेक्स का उपयोग करते समय यह सबसे अच्छा जवाब है। – meYnot

27

इतना मुश्किल क्यों है?

var filename = url.split('/').pop().split('#')[0].split('?')[0];

+1

अच्छी तरह से किया गया। '#' और/या '?' की मौजूदगी या अनुपस्थिति को संभालती है। – benjineer

+1

यह शीर्ष जवाब होना चाहिए। –

+1

धन्यवाद। यह बहुत अच्छा है –

1

यह उत्तर केवल ब्राउज़र वातावरण में काम करता है। नोड के लिए उपयुक्त नहीं है।

function getFilename(url) { 
    const filename = decodeURIComponent(new URL(url).pathname.split('/').pop()); 
    if (!filename) return 'index.html'; // some default filename 
    return filename; 
} 

function filenameWithoutExtension(filename) { 
    return filename.replace(/^(.+?)(?:\.[^.]*)?$/, '$1'); 
} 

ब्राउज़रों new URL का समर्थन नहीं करते के लिए, आप कर सकते हैं:

  • पहले एक यूआरएल
  • दूसरे से फ़ाइल नाम मिलता है:

    var a = document.createElement('a'); 
    a.href = url; 
    var pathname = a.pathname; 
    

    यहाँ दो कार्य हैं एक से एक्सटेंशन के बिना फ़ाइल नाम मिलता है पूर्ण फ़ाइल नाम

पार्सिंग यूआरएल के लिए, नया URL ऑब्जेक्ट सबसे अच्छा विकल्प होना चाहिए। यह भी ध्यान दें कि यूआरएल में हमेशा एक फ़ाइल नाम नहीं होता है।

नोटिस: यह फ़ंक्शन किसी URL से फ़ाइल नाम को हल करने का प्रयास करता है। लेकिन यह गारंटी नहीं है कि फ़ाइल नाम वैध और उपयोग के लिए उपयुक्त है:

  • कुछ ओएस फ़ाइल नाम में कुछ चरित्र नामंज़ूर (जैसे खिड़कियों में :, \0 सबसे ओएस में, ...);
  • कुछ फ़ाइल नाम ओएस द्वारा सुरक्षित हो सकता है (जैसे विंडोज़ में कंस);
  • कुछ फ़ाइल नाम उपयोगकर्ता को इसे संभालने में नाखुश बना सकता है (उदा।"--help" लिनक्स में) नाम की एक फ़ाइल
की