Возвращаемая строка без конечной косой черты

У меня есть две переменные:

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;
}

Как это сделать?

Ответ 1

Попробуйте следующее:

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

Ответ 2

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

Примечание. IE8 и более старые не поддерживают отрицательные смещения субстрата. Используйте str.length - 1 вместо этого, если вам нужно поддерживать эти древние браузеры.

Ответ 3

ES6/ES2015 предоставляет API для запроса, заканчивается ли строка чем-то, что позволяет писать более чистую и удобную для чтения функцию.

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

Ответ 4

Я бы использовал регулярное выражение:

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 является строкой.

Ответ 5

Этот фрагмент более точным:

str.replace(/^(.+?)\/*?$/, "$1");
  • Он не разбивает строки /, так как это действительный url.
  • Он разбивает строки с несколькими трейлинг-косами.

Ответ 6

Я знаю, что вопрос касается конечных косых черт, но я нашел этот пост во время поиска косых черт (как в хвостовой части, так и в начале строкового литерала), так как людям понадобится это решение, я публикую его здесь:

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

UPDATE:

как упоминалось в комментариях @Stephen R, если вы хотите удалить как косую черту, так и обратную косую черту как в хвостовой части, так и в начале строкового литерала, вы должны написать:

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

Ответ 7

Легкий способ, о котором я знаю, это

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

Затем будет проверяться на/на конце, и если его там удалить, если он не вернет вашу строку, как она была

Только одно, что я пока не могу прокомментировать @ThiefMaster ничего себе вы не заботитесь о памяти, вы lol runnign substr только для if?

Исправлено калибровка для индекса на основе нуля.

Ответ 8

Вот небольшой пример URL.

var currentUrl = location.href;

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

запишите новый URL

console.log(currentUrl);

Ответ 9

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

другое решение.

Ответ 10

На основании ответа @vdegenne... как раздеться:

Одиночная косая черта:

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

Одиночные или последовательные косые черты:

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

Одиночная косая черта:

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

Одиночные или последовательные начальные косые черты:

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

Одиночные начальные и конечные слеши:

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

Одиночные или последовательные начальные и конечные слеши:

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

Для обработки как косых, так и обратных косых черт замените экземпляры \/ на [\\/]

Ответ 11

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