URL का अंतिम खंड


228

मुझे url का अंतिम खंड कैसे मिलेगा? मेरे पास निम्न स्क्रिप्ट है जो क्लिक किए गए एंकर टैग के पूर्ण यूआरएल को प्रदर्शित करता है:

$(".tag_name_goes_here").live('click', function(event)
{
    event.preventDefault();  
    alert($(this).attr("href"));
});

अगर url है

http://mywebsite/folder/file

मुझे अलर्ट बॉक्स में "फ़ाइल" भाग को प्रदर्शित करने के लिए केवल यह कैसे मिलता है?


नीचे मेरा काम जावा स्क्रिप्ट समाधान है। इसमें मदद करता है। stackoverflow.com/a/38370175/610951
रवि शंकर कोटा

जवाबों:


369

आप अपने URL में वर्ण की अंतिम घटना का पता लगाने के लिए lastIndexOf () फ़ंक्शन का उपयोग कर सकते हैं /, फिर उस स्थान से शुरू होने वाले प्रतिस्थापन को वापस करने के लिए विकल्प () फ़ंक्शन:

console.log(this.href.substring(this.href.lastIndexOf('/') + 1));

इस तरह, आप अपने सभी URL सेगमेंट वाले एक सरणी बनाने से बचेंगे, जैसा कि split()करता है।


3
@oshirowanen, नहीं, लेकिन यह प्रत्येक URL सेगमेंट से एक एलीमेंट एलीमेंट बनाएगा। चूँकि आप केवल अंतिम सेगमेंट में रुचि रखते हैं, इसलिए कई ऐरे तत्वों को आवंटित करना बेकार हो सकता है जिनका आप कभी उपयोग नहीं करेंगे।
Frédéric Hamidi

11
लेकिन अगर url जैसा हो गया admin/store/tour/-1/तो यह ''स्ट्रिंग होगा ?
कायर वा लर

1
@ सेट, अच्छे, शायद धीमी।
Frédéric Hamidi

1
क्या होगा अगर url में /अंत में शामिल है?
Sain atошƒаӽ

6
Attn: @ सेट क्यार वा लर अगस्त और @ SANƒошӽа for url के लिए समाधान जिसमें /अंत में शामिल हैं:var url = window.location.href.replace(/\/$/, ''); /* remove optional end / */ var lastSeg = url.substr(url.lastIndexOf('/') + 1);
Ross

151

var parts = 'http://mywebsite/folder/file'.split('/');
var lastSegment = parts.pop() || parts.pop();  // handle potential trailing slash

console.log(lastSegment);


क्या आप मुझे समझा सकते हैं कि यह कैसे काम करता है? मेरे ज्ञान के अनुसार। pop () एक सरणी के अंतिम तत्व को हटाने के लिए उपयोग किया जाता है। लेकिन यहाँ यह मेरे url का अंतिम तत्व दिखाया गया है !!
शाहीन

1
स्प्लिट आपके url को '/' द्वारा सीमांकित url के प्रत्येक खंड को एक सरणी में बदल देगा। इसलिए अंतिम खंड url और बाद में बनाए गए सरणी दोनों का अंतिम तत्व है।
स्टीफन

10
यह काम नहीं करेगा अगर यूआरएल एक "/" के साथ समाप्त होता हैhttp://mywebsite/folder/file/
पीटर लुडलो

@PeterLudlow यह क्रोम 76 में काम करता है आप कृपया विस्तार से
बता

1
@PeterLudlow यह काम करता है क्योंकि एक खाली स्ट्रिंग JS सार "" == falseमें गलत है , उस स्थिति में यह खाली स्ट्रिंग के साथ सरणी का हिस्सा पॉप करता है
सिरप

86
window.location.pathname.split("/").pop()

2
सरल और आसान। धन्यवाद।
krezaeim

3
परफेक्ट एंड टाइड, महान
बाबक हबीबी

1
सुंदर और स्वच्छ प्रतिक्रिया
जर्किस सालास जूल

1
यही वह है जिसकी तलाश में मैं हूं। प्रतिक्रिया-राउटर-डोम का उपयोग करना यह सबसे साफ समाधान था जो मैंने पिछले फॉरवर्ड स्लैश को पीछे छोड़ते हुए URL के अंतिम भाग को खोजने के लिए पाया है /console.log(history.location.pathname.split("/").pop()) अगर कोई बेहतर तरीका है तो मैं जानना चाहूंगा! उम्मीद है कि यह टिप्पणी अधिक लोगों को आपके उत्तर की ओर ले जा सकती है। धन्यवाद @ Dblock247
त्रालवार

सिडेनोट: यह काम नहीं करता है यदि URL में क्वेरी परमान सेट नहीं है (जैसे .../file?var=value&foo=bar)। यह समाधान इस समस्या को और अधिक मजबूत और आधुनिक तरीके से हल करता है: stackoverflow.com/a/51795122/1123743
सेबस्टियन बर्थ


18

जावास्क्रिप्ट में फंक्शन ऑब्जेक्ट से संबंधित फूट स्प्लिट है जो आपकी सहायता कर सकता है:

var url = "http://mywebsite/folder/file";
var array = url.split('/');

var lastsegment = array[array.length-1];

17

यदि पथ सरल है, तो अन्य उत्तर केवल सरल पथ तत्वों से युक्त हो सकते हैं। लेकिन जब इसमें क्वेरी परम शामिल होते हैं, तो वे टूट जाते हैं।

अधिक मजबूत समाधान प्राप्त करने के लिए इसके लिए URL का बेहतर उपयोग करें । यह वर्तमान URL की पार्स की गई व्याख्या है:

इनपुट: const href = 'https://stackoverflow.com/boo?q=foo&s=bar'

const segments = new URL(href).pathname.split('/');
const last = segments.pop() || segments.pop(); // Handle potential trailing slash
console.log(last);

आउटपुट: 'boo'

यह सभी सामान्य ब्राउज़रों के लिए काम करता है। केवल हमारे मरने वाले IE का समर्थन नहीं करता है (और नहीं होगा)। IE के लिए एक पॉलीफ़िल उपलब्ध है, हालांकि (यदि आप सभी की देखभाल करते हैं)।




5

मुझे पता है, यह बहुत देर हो चुकी है, लेकिन दूसरों के लिए: मैंने अत्यधिक PURL jquery प्लगइन का उपयोग करने की सिफारिश की है । PURL के लिए प्रेरणा यह है कि url को '#' द्वारा भी खंडित किया जा सकता है (उदाहरण: angular.js लिंक), अर्थात url ऐसा लग सकता है

    http://test.com/#/about/us/

या

    http://test.com/#sky=blue&grass=green

और PURL से आप आसानी से तय कर सकते हैं (सेगमेंट / fsegment) कि आप किस सेगमेंट को प्राप्त करना चाहते हैं।

"क्लासिक" अंतिम खंड के लिए आप लिख सकते हैं:

    var url = $.url('http://test.com/dir/index.html?key=value');
    var lastSegment = url.segment().pop(); // index.html

4

केवल जावास्क्रिप्ट का उपयोग करके फ्रेडेरिक के उत्तर पर निर्माण:

var url = document.URL

window.alert(url.substr(url.lastIndexOf('/') + 1));

3

इसके अलावा,

var url = $(this).attr("href");
var part = url.substring(url.lastIndexOf('/') + 1);

3

यदि आप विभाजन का उपयोग करके अतिरिक्त तत्वों को उत्पन्न करने के बारे में चिंतित नहीं हैं, तो फ़िल्टर आपके द्वारा अनुगामी स्लैश के उल्लेख को संभाल सकता है (मान लें कि आपके पास फ़िल्टर के लिए ब्राउज़र समर्थन है)।

url.split('/').filter(function (s) { return !!s }).pop()

3
// Store original location in loc like: http://test.com/one/ (ending slash)
var loc = location.href; 
// If the last char is a slash trim it, otherwise return the original loc
loc = loc.lastIndexOf('/') == (loc.length -1) ? loc.substr(0,loc.length-1) : loc.substr(0,loc.lastIndexOf('/'));
var targetValue = loc.substr(loc.lastIndexOf('/') + 1);

targetValue = एक

यदि आपका url दिखता है:

http://test.com/one/

या

http://test.com/one

या

http://test.com/one/index.htm

तब लोक समाप्त होता है: http://test.com/one

अब, चूंकि आप अंतिम आइटम चाहते हैं, इसलिए मूल रूप से वांछित मूल्य (लक्ष्यवैल्यू) को लोड करने के लिए अगला चरण चलाएं।

var targetValue = loc.substr(loc.lastIndexOf('/') + 1);

मुझे शायद कुछ याद है, लेकिन " test.com/one " के साथ लोकेशन कुछ इस तरह दिखता है: " test.com "। मुझे लगता है कि यह ऐसा होना चाहिए: अगर (loc.lastIndexOf ('/') == (loc.length -1)) {loc = loc.substr (0, loc.length -1)} बाकी {var isFor = loc। पदार्थ (loc.lastIndexOf ('/'), loc.length) .indexOf (''। ')! = -1; if (isFile) loc = loc.substr (0, loc.lastIndexOf ('/')); }
एलन राक्विन

में searchया अगर स्लैश में विफल रहता है hash
Walf

3
window.alert(this.pathname.substr(this.pathname.lastIndexOf('/') + 1));

मूल pathnameसंपत्ति का उपयोग करें क्योंकि यह सबसे सरल है और पहले से ही ब्राउज़र द्वारा पार्स और हल कर दिया गया है। $(this).attr("href")ऐसे मान लौटा सकते हैं ../..जो आपको सही परिणाम नहीं देंगे।

आप रखने के लिए की जरूरत है searchऔर hash(जैसे foo?bar#bazसे http://quux.com/path/to/foo?bar#baz) इस का उपयोग करें:

window.alert(this.pathname.substr(this.pathname.lastIndexOf('/') + 1) + this.search + this.hash);

इसके अलावा उस pathnameस्ट्रिप्स क्वेरी पैरामीटर को जोड़ना चाहते हैं , लेकिन hrefनहीं।
मैक्स हाइबर

3

अपनी वर्तमान विंडो का अंतिम खंड प्राप्त करने के लिए:

window.location.href.substr(window.location.href.lastIndexOf('/') +1)


3

आप पहले निकाल सकते हैं अगर वहाँ / अंत में है और फिर url का अंतिम भाग प्राप्त करें

let locationLastPart = window.location.pathname
if (locationLastPart.substring(locationLastPart.length-1) == "/") {
  locationLastPart = locationLastPart.substring(0, locationLastPart.length-1);
}
locationLastPart = locationLastPart.substr(locationLastPart.lastIndexOf('/') + 1);

3

पीछे वाले सेगमेंट की परवाह किए बिना, स्लैशिंग ट्रेल्स की परवाह किए बिना:

var val = 'http://mywebsite/folder/file//'.split('/').filter(Boolean).pop();

console.log(val);


आप शायद path.sepशाब्दिक स्लैश का उपयोग नहीं करना चाहते हैं । देखें नोड्स.ओआरजी । इससे आपका कोड OS के पार पोर्टेबल रहेगा।
हारून

1
अच्छा विचार है, लेकिन यह अब ब्राउज़र में काम नहीं करेगा
जॉन डोहर्टी

अच्छी बात। मुझे कहना चाहिए कि यह कमांड लाइन स्क्रिप्ट / सर्वर-साइड नोडज में पसंद किया जाता है।
आरोन


1

अपडेटेड रेडियस उत्तर:

var loc = window.location.href;
loc = loc.lastIndexOf('/') == loc.length - 1 ? loc.substr(0, loc.length - 1) : loc.substr(0, loc.length + 1);
var targetValue = loc.substr(loc.lastIndexOf('/') + 1);

स्ट्रिंग के रूप में url का अंतिम पथ प्रिंट करता है:

test.com/path-name = path-name

test.com/path-name/ = path-name

0

मेरा मानना ​​है कि सबस्ट्रिंग करने से पहले टेल स्लैश ('/') को निकालना सुरक्षित है। क्योंकि मुझे अपने परिदृश्य में एक रिक्त स्ट्रिंग मिली।

window.alert((window.location.pathname).replace(/\/$/, "").substr((window.location.pathname.replace(/\/$/, "")).lastIndexOf('/') + 1));

0

मैं regex और विभाजन का उपयोग कर रहा हूं:

var last_path = location.href.match (/। / (। \ w]) /) [1] .plplit ("#") [0] .plplit ("?") [0]

अंत में इसे नजरअंदाज करेंगे #? & / url को समाप्त करना, जो बहुत कुछ होता है। उदाहरण:

https://cardsrealm.com/profile/cardsRealm -> कार्ड लौटाता है

https://cardsrealm.com/profile/cardsRealm#hello -> कार्ड लौटाता है

https://cardsrealm.com/profile/cardsRealm?hello -> कार्ड लौटाता है

https://cardsrealm.com/profile/cardsRealm/ -> कार्ड लौटाता है


0

मैं वास्तव में नहीं जानता कि क्या रेगेक्स इस मुद्दे को हल करने का सही तरीका है क्योंकि यह वास्तव में आपके कोड की दक्षता को प्रभावित कर सकता है, लेकिन नीचे दिया गया रेग्क्स आपको अंतिम सेगमेंट लाने में मदद करेगा और यह तब भी आपको अंतिम सेगमेंट देगा, भले ही URL एक खाली के बाद है /। मेरे साथ आया रेगीक्स है:

[^\/]+[\/]?$

0
// https://x.com/boo/?q=foo&s=bar = boo
// https://x.com/boo?q=foo&s=bar = boo
// https://x.com/boo/ = boo
// https://x.com/boo = boo

const segment = new 
URL(window.location.href).pathname.split('/').filter(Boolean).pop();
console.log(segment);

मेरे लिये कार्य करता है।


0

मुझे पता है कि यह पुराना है, लेकिन यदि आप इसे एक ऐसे URL से प्राप्त करना चाहते हैं, जिसका आप उपयोग कर सकते हैं:

document.location.pathname.substring(document.location.pathname.lastIndexOf('/.') + 1);

document.location.pathnameवर्तमान URL से पथनाम प्राप्त होता है। lastIndexOfहमारे मामले में निम्नलिखित रेगेक्स की अंतिम घटना का सूचकांक प्राप्त करें /.। डॉट का अर्थ किसी भी वर्ण से है, इस प्रकार, यह गणना नहीं करेगा /कि URL पर अंतिम वर्ण है या नहीं। substringदो इंडेक्स के बीच स्ट्रिंग काट देगा।


0

अगर यूआरएल है http://localhost/madukaonline/shop.php?shop=79

console.log(location.search); लाएगा ?shop=79

इसलिए सबसे आसान तरीका है, लोकेशन का उपयोग करना

आप यहां और अधिक जानकारी के लिए देख सकते हैं


0

आप इसे सरल रास्तों (w / 0) के साथ कर सकते हैं आदि।

दी गई शायद अधिक जटिल और शायद प्रदर्शन नहीं कर रही है, लेकिन मैं reduceइसके मज़े के लिए उपयोग करना चाहता था ।

  "/foo/bar/"
    .split(path.sep)
    .filter(x => x !== "")
    .reduce((_, part, i, arr) => {
      if (i == arr.length - 1) return part;
    }, "");
  1. पथ विभाजकों पर स्ट्रिंग विभाजित करें।
  2. खाली स्ट्रिंग पथ भागों को फ़िल्टर करें (यह पथ में अनुगामी स्लैश के साथ हो सकता है)।
  3. पथ भागों के सरणी को पिछले एक तक कम करें।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.