वापसी के बिना स्ट्रिंग स्लेश


196

मेरे पास दो चर हैं:

site1 = "www.somesite.com";  
site2 = "www.somesite.com/";  

मैं ऐसा कुछ करना चाहता हूं

function someFunction(site)
{
    // If the var has a trailing slash (like site2), 
    // remove it and return the site without the trailing slash
    return no_trailing_slash_url;
}

मैं यह कैसे करु?


जवाबों:


480

इसे इस्तेमाल करे:

function someFunction(site)     
{     
    return site.replace(/\/$/, "");
} 

122
कई ट्रेलिंग स्लैश के साथ मामलों को संभालने के लिए, आप उपयोग कर सकते हैं:return site.replace(/\/+$/, "");
mikermcneil

13
""".replace(/\/$/," ")" "होगा। "/" एक मान्य पथ है और इसे छीन नहीं लिया जाना चाहिए।
पुचू

79
function stripTrailingSlash(str) {
    if(str.substr(-1) === '/') {
        return str.substr(0, str.length - 1);
    }
    return str;
}

नोट: IE8 और पुराने नकारात्मक पदार्थ ऑफसेट का समर्थन नहीं करते हैं। str.length - 1यदि आपको उन प्राचीन ब्राउज़रों का समर्थन करने की आवश्यकता है, तो इसके बजाय उपयोग करें ।


वास्तव में यहां 'प्राचीन' शब्द का उपयोग पसंद है।
पेजसोर्स 20

48

ES6 / ES2015 यह पूछने के लिए एक एपीआई प्रदान करता है कि क्या कुछ के साथ एक स्ट्रिंग समाप्त होती है, जो एक क्लीनर और अधिक पठनीय फ़ंक्शन लिखने में सक्षम बनाता है।

const stripTrailingSlash = (str) => {
    return str.endsWith('/') ?
        str.slice(0, -1) :
        str;
};

3
2019 में सर्वश्रेष्ठ समाधान
Paul

@PaRRad इस सोलन का उपयोग करते समय, str.slice (0, -1) शाखा का अंक प्राप्त करना, इकाई परीक्षण पर इस लाइन के लिए कवर नहीं है। उसे कैसे ठीक करें?
बिजय राय

30

मैं एक नियमित अभिव्यक्ति का उपयोग करूंगा:

function someFunction(site)
{
// if site has an end slash (like: www.example.com/),
// then remove it and return the site without the end slash
return site.replace(/\/$/, '') // Match a forward slash / at the end of the string ($)
}

आप यह सुनिश्चित करना चाहेंगे कि चर siteएक स्ट्रिंग है, हालांकि।


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

12

यह स्निपेट अधिक सटीक है:

str.replace(/^(.+?)\/*?$/, "$1");
  1. यह /स्ट्रिंग्स को स्ट्रिप नहीं करता है, क्योंकि यह एक मान्य यूआरएल है।
  2. यह कई ट्रेलिंग स्लैश के साथ स्ट्रिंग्स को स्ट्रिप्स करता है।

हालांकि यह कई स्लैश को हटाने के लिए एक वैध दृष्टिकोण हो सकता है, यह ओपी का अनुरोध नहीं है।
जॉन एल।

@JonL। कई लोग उत्तर खोजने के लिए स्टैक ओवरफ्लो ब्राउज़ करते हैं। मुझे यह उत्तर स्वीकृत उत्तर की तुलना में मददगार लगता है।
रोनेल मार्टिनेज

@JonL। कई लोग उत्तर खोजने के लिए स्टैक ओवरफ्लो ब्राउज़ करते हैं। मुझे यह उत्तर स्वीकृत उत्तर की तुलना में मददगार लगता है।
रोनेल मार्टिनेज

10

मुझे पता है कि सवाल स्लैशिंग के बारे में है लेकिन मुझे यह पोस्ट ट्रिमिंग स्लैश (पूंछ और एक स्ट्रिंग शाब्दिक के सिर दोनों) के लिए मेरी खोज के दौरान मिली, क्योंकि लोगों को इस समाधान की आवश्यकता होगी जो मैं यहां पोस्ट कर रहा हूं:

'///I am free///'.replace(/^\/+|\/+$/g, ''); // returns 'I am free'

अपडेट करें :

जैसा कि @Stephen R ने टिप्पणियों में उल्लेख किया है, यदि आप पूंछ और एक स्ट्रिंग शाब्दिक के सिर पर दोनों स्लैश और बैकस्लैश को हटाना चाहते हैं, तो आप लिखेंगे:

'\/\\/\/I am free\\///\\\\'.replace(/^[\\/]+|[\\/]+$/g, '') // returns 'I am free'

यह असली जवाब है!
13:15 बजे

1
यदि आप स्लैश और बैकस्लैश दोनों को ट्रिम करना चाहते हैं:.replace(/^[\\/]+|[\\/]+$/g, '')
स्टीफन आर

3

@Vdegenne के जवाब के आधार पर ... कैसे पट्टी करने के लिए:

एकल अनुगामी स्लैश:

theString.replace(/\/$/, '');

एकल या लगातार ट्रेलिंग स्लैश:

theString.replace(/\/+$/g, '');

एकल प्रमुख स्लैश:

theString.replace(/^\//, '');

एकल या लगातार प्रमुख स्लैश:

theString.replace(/^\/+/g, '');

सिंगल लीडिंग और ट्रेलिंग स्लैश:

theString.replace(/^\/|\/$/g, '')

एकल या लगातार अग्रणी और पीछे चल रहा स्लैश:

theString.replace(/^\/+|\/+$/g, '')

दोनों स्लैश और संभाल करने के लिए वापस स्लैश, के उदाहरण की जगह \/के साथ[\\/]


2

जिस तरह से मुझे पता है कि यह आसान है

function stipTrailingSlash(str){
   if(srt.charAt(str.length-1) == "/"){ str = str.substr(0, str.length - 1);}
   return str
}

यह अंत में / a के लिए जाँच करेगा और अगर वहाँ से इसे हटाता है, तो यह आपके स्ट्रिंग को वापस नहीं करेगा जैसा कि यह था

बस एक बात है कि मैं अभी तक @ThiefMaster पर टिप्पणी नहीं कर सकता, वाह क्या आप स्मृति के बारे में परवाह नहीं करते हैं क्या आप एक रूट के लिए रन बनाते हैं अगर एक के लिए?

स्ट्रिंग पर शून्य-आधारित सूचकांक के लिए उपयुक्तता निर्धारित की।


2

यहाँ एक छोटा सा यूआरएल उदाहरण है।

var currentUrl = location.href;

if(currentUrl.substr(-1) == '/') {
    currentUrl = currentUrl.substr(0, currentUrl.length - 1);
}

नया url लॉग करें

console.log(currentUrl);

1
function stripTrailingSlash(text) {
    return text
        .split('/')
        .filter(Boolean)
        .join('/');
}

एक और समाधान।


-11
function someFunction(site) {
  if (site.indexOf('/') > 0)
    return site.substring(0, site.indexOf('/'));
  return site;
}

2
subtring? इसके अलावा, यह पहले स्लैश और उसके बाद सब कुछ हटा देता है।
ThiefMaster

@ThiefMaster: वाक़ई? आप यह नहीं बता सकते कि मेरा मतलब substringक्या था ? इसके अलावा, मेरा मतलब पहले स्लैश और उसके बाद की हर चीज को हटाना है क्योंकि यह प्रश्न और उदाहरण के लिए पोस्ट किए गए डेटा के बिल को भरता है।
josh.trow

वैसे उनकी टिप्पणी कहती है कि वह
थिएफ़ेस्टर

@ThiefMaster: जो, उनके उदाहरणों के अनुसार, मेरा कोड करता है।
josh.trow

1
सिर्फ इसलिए नहीं कि किसी भी बिंदु पर इसका उपयोग क्यों नहीं किया जाए, यदि यूआरएल "पूरी तरह से योग्य" हो जाए, तो http: // यह अभ्यस्त काम होगा और गोगलर्स के लिए मिडल वॉन्ट के
बर्कर्मन01
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.