Повернення рядка без косої риски


198

У мене є дві змінні:

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

Як це зробити?


Відповіді:


481

Спробуйте це:

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

124
Для обробки випадків з декількома косою косою рискою можна скористатися: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натомість, якщо вам потрібно підтримати ці старовинні браузери.


Дуже подобається тут використання терміна "древній".
PageSource

48

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

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

3
найкраще рішення у 2019 році 🤙
Пол Рад,

@PaulRad Використовуючи цей soln, отримуючи випуск гілки str.slice (0, -1), не охоплені для цього рядка на одиничному тесті. Як це виправити?
Bijay Rai

1
@BijayRai, що означає, що у ваших тестах відсутній випадок, коли strзакінчується /косою рисою. У вас повинно бути два твердження (або два тести), одне з косою рискою і одне без.
Сет Холладей

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. Він не знімає /рядки, оскільки це дійсна URL-адреса.
  2. Він позбавляє струни з декількома задніми нахилами.

Хоча це може бути правильним підходом до видалення декількох косої риси, це не запит ОП.
Джон Л.

@JonL. Багато людей переглядають переповнення стека, щоб знайти відповідь. Я вважаю цю відповідь кориснішою, ніж прийняту відповідь.
Роннель Мартінес

@JonL. Багато людей переглядають переповнення стека, щоб знайти відповідь. Я вважаю цю відповідь кориснішою, ніж прийняту відповідь.
Роннель Мартінес

11

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

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

ОНОВЛЕННЯ :

як @Stephen R згадував у коментарях, якщо ви хочете прибрати як косі, так і зворотні косої риси як у хвіст, так і в голові рядкового рядка, ви напишете:

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

Це справжня відповідь!
Можна РОБИТИ

2
Якщо ви хочете обрізати косі .replace(/^[\\/]+|[\\/]+$/g, '')
Stephen R

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
}

Потім буде перевірено наявність / в кінці, і якщо його там, видаліть, якщо він не поверне ваш рядок таким, яким він був

Тільки одне, що я не можу коментувати ще @TentistMaster Уау, вам не байдуже пам’ять, чи не хочете ви запустити субстрат лише якщо?

Виправлено оцінку нульового індексу на рядку.


2

Ось невеликий приклад URL-адреси.

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

@TistantMaster: Дійсно? Ви не можете сказати, що я мав на увазі substring? Також так, я мав намір зняти першу косу рису та все після неї, оскільки він заповнив рахунок за запитання та приклади даних, розміщених у списку.
josh.trow

Добре, що його коментар говорить, що він хоче прибрати
кінцеву

@TentistMaster: Що, згідно з його прикладами, мій код.
josh.trow

1
Тільки не, чому б не використовувати це в будь-який момент, якщо URL-адреси переходять на "повністю кваліфіковані", мають http: // це звичайна робота та будь-які посилання на / в середній частині роботи для googlers
googlers Barkermn01
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.