कम से कम तीन तरीके:
एक नियमित अभिव्यक्ति:
var result = /[^/]*$/.exec("foo/bar/test.html")[0];
... जो कहता है " [^/]*
स्ट्रिंग के अंत में स्लैश नहीं होने वाले पात्रों की श्रृंखला को पकड़ो" ( $
)। तब यह मिलान किए गए ऑब्जेक्ट से मिलान किए गए ऑब्जेक्ट को इसमें अनुक्रमित करके पकड़ लेता है ( [0]
); एक मैच ऑब्जेक्ट में, पहली प्रविष्टि पूरे मिलान स्ट्रिंग है। कब्जा समूहों के लिए कोई ज़रूरत नहीं है।
जीवंत उदाहरण
उपयोग करना lastIndexOf
और substring
:
var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);
lastIndexOf
ऐसा लगता है कि यह कैसा लगता है: यह एक स्ट्रिंग में एक चरित्र (अच्छी तरह से, स्ट्रिंग) की अंतिम घटना का सूचकांक पाता है , यदि नहीं मिला तो -1 लौट रहा है। दस में से नौ बार आप शायद उस रिटर्न वैल्यू ( if (n !== -1)
) को चेक करना चाहते हैं , लेकिन ऊपर से जब से हम इसमें 1 जोड़ रहे हैं और सबस्ट्रिंग को कॉल कर रहे हैं, हम अंत में str.substring(0)
वही करेंगे जो स्ट्रिंग को वापस करता है।
का उपयोग करते हुए Array#split
सुधीर और टॉम वाल्टर्स ने इसे यहाँ और यहाँ कवर किया है , लेकिन सिर्फ पूर्णता के लिए:
var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();
split
दिए गए सीमांकक का उपयोग करके एक स्ट्रिंग को विभाजित करता है, जो एक सरणी देता है।
lastIndexOf
/ substring
समाधान है शायद सबसे कारगर (हालांकि एक हमेशा जावास्क्रिप्ट और प्रदर्शन के बारे में कुछ भी कह रही है, के बाद से इंजन एक दूसरे से इतना मौलिक अलग-अलग हो सावधान हो गया है), लेकिन जब तक आप एक पाश में कई बार इस हजारों कर रहे हैं, ऐसा नहीं 't मामला और मैं कोड की स्पष्टता के लिए प्रयास करूँगा।