Zwraca ciąg bez ukośnika

Odpowiedzi:

480

Spróbuj tego:

function someFunction(site)     
{     
    return site.replace(/\/$/, "");
} 
Chandu
źródło
122
Aby obsłużyć sprawy z wieloma końcowymi ukośnikami, możesz użyć:return site.replace(/\/+$/, "");
mikermcneil
13
„/".replace(/\/$/,” ”) będzie„ ”. „/” jest prawidłową ścieżką i nie należy jej usuwać.
puchu
79
function stripTrailingSlash(str) {
    if(str.substr(-1) === '/') {
        return str.substr(0, str.length - 1);
    }
    return str;
}

Uwaga: IE8 i starsze nie obsługują przesunięć ujemnych substratów. Użyj str.length - 1zamiast tego, jeśli chcesz obsługiwać te starożytne przeglądarki.

ThiefMaster
źródło
Naprawdę podoba mi się tutaj użycie terminu „starożytny”.
PageSource
48

ES6 / ES2015 zapewnia interfejs API do zadawania pytań, czy łańcuch kończy się czymś, co umożliwia napisanie czystszej i bardziej czytelnej funkcji.

const stripTrailingSlash = (str) => {
    return str.endsWith('/') ?
        str.slice(0, -1) :
        str;
};
Seth Holladay
źródło
3
najlepsze rozwiązanie w 2019 r.
Paul Rad
@PaulRad Podczas korzystania z tego rozwiązania, uzyskiwanie problemu z gałęzi str.slice (0, -1) nie jest uwzględnionego dla tego wiersza podczas testu jednostkowego. Jak to naprawić?
Bijay Rai
30

Użyłbym wyrażenia regularnego:

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 ($)
}

Musisz jednak upewnić się, że zmienna sitejest ciągiem.

ChronosLLC
źródło
3
Całkowicie się zgadzam, że za każdym razem, gdy napiszesz wyrażenie regularne, powinno ono być owinięte funkcją o nazwie opisowej lub z komentarzami.
Eric Labashosky,
12

Ten fragment jest dokładniejszy:

str.replace(/^(.+?)\/*?$/, "$1");
  1. Nie usuwa /ciągów, ponieważ jest to prawidłowy adres URL.
  2. Usuwa ciągi znaków z wieloma końcowymi ukośnikami.
1ven
źródło
Chociaż może to być poprawne podejście do usuwania wielu ukośników, nie jest to prośba PO.
Jon L.
@JonL. Wiele osób przegląda przepełnienie stosu, aby znaleźć odpowiedź. Uważam tę odpowiedź za pomocną niż odpowiedź zaakceptowana.
Ronnel Martinez
@JonL. Wiele osób przegląda przepełnienie stosu, aby znaleźć odpowiedź. Uważam tę odpowiedź za pomocną niż odpowiedź zaakceptowana.
Ronnel Martinez
10

Wiem, że pytanie dotyczy końcowych ukośników, ale znalazłem ten post podczas poszukiwań przycinania ukośników (zarówno na ogonie, jak i na początku literału łańcucha), ponieważ ludzie potrzebowaliby tego rozwiązania, które zamieszczam tutaj:

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

AKTUALIZACJA :

jak wspomniano w komentarzach @Stephen R , jeśli chcesz usunąć zarówno ukośniki, jak i ukośniki odwrotne zarówno na ogonie, jak i na początku literału łańcucha, napiszesz:

'\/\\/\/I am free\\///\\\\'.replace(/^[\\/]+|[\\/]+$/g, '') // returns 'I am free'
Vdegenne
źródło
To jest prawdziwa odpowiedź!
Można PERK
1
Jeśli chcesz przyciąć zarówno ukośniki, jak i ukośniki odwrotne:.replace(/^[\\/]+|[\\/]+$/g, '')
Stephen R
3

Na podstawie odpowiedzi @vdegenne ... jak rozebrać:

Pojedynczy ukośnik:

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

Pojedyncze lub kolejne ukośniki końcowe:

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

Pojedynczy ukośnik:

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

Pojedyncze lub kolejne ukośniki:

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

Pojedyncze ukośniki wiodące i końcowe:

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

Pojedyncze lub kolejne ukośniki wiodące i końcowe:

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

Aby obsługiwać zarówno ukośniki i pleców ukośniki, wymienić wystąpienia \/z[\\/]

Stephen R.
źródło
2

Łatwo o tym wiem

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

Spowoduje to sprawdzenie / na końcu i jeśli go tam usunie, jeśli nie, zwróci Twój ciąg znaków tak, jak był

Tylko jedna rzecz, której nie mogę jeszcze komentować @ ThiefMaster wow, nie obchodzi cię pamięć, czy nie chcesz uruchomić substra tylko dla if?

Naprawiono obliczanie indeksu zerowego w łańcuchu.

Barkermn01
źródło
2

Oto mały przykład adresu URL.

var currentUrl = location.href;

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

zaloguj nowy adres URL

console.log(currentUrl);
DevJ3rry
źródło
1
function stripTrailingSlash(text) {
    return text
        .split('/')
        .filter(Boolean)
        .join('/');
}

inne rozwiązanie.

Доширак
źródło
-11
function someFunction(site) {
  if (site.indexOf('/') > 0)
    return site.substring(0, site.indexOf('/'));
  return site;
}
josh.trow
źródło
2
subtring? Poza tym usuwa pierwszy ukośnik i wszystko po nim.
ThiefMaster
@ThiefMaster: Naprawdę? Nie możesz powiedzieć, że miałem na myśli substring? Również tak, chciałem usunąć pierwszy ukośnik i wszystko po nim, ponieważ wypełnia on rachunek za opublikowane pytanie i przykładowe dane.
josh.trow
Cóż, jego komentarz mówi, że chce usunąć końcowy ukośnik
ThiefMaster
@ ThiefMaster: Co, według jego przykładów, robi mój kod.
josh.trow
1
Tylko nie, dlaczego nie używać tego w dowolnym momencie, jeśli adresy URL zmieniają się na „w pełni kwalifikowane”, mają http: // to nie będzie działać, a wszelkie linki z / w środku nie będą działać dla googlersów
Barkermn01