Rückgabezeichenfolge ohne nachgestellten Schrägstrich

Lesezeit: 4 Minuten

Benutzer-Avatar
Ryan

Ich habe zwei Variablen:

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

Ich möchte so etwas tun

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

Wie mache ich das?

  • Mögliches Duplikat von JQuery prüfen und Schrägstrich vom Ende der gelesenen URL entfernen

    – Hugo

    29. Januar 2014 um 8:17 Uhr

Versuche dies:

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

  • Um Fälle mit mehreren nachgestellten Schrägstrichen zu behandeln, können Sie Folgendes verwenden: return site.replace(/\/+$/, "");

    – Mikermcneil

    21. Februar 2012 um 18:48 Uhr


  • “/”.replace(/\/$/, “”) wird zu “”. “/” ist ein gültiger Pfad und sollte nicht entfernt werden.

    – Puchu

    19. Juli 2016 um 16:15 Uhr

  • Sei vorsichtig mit /\/+$/, was in einem Kommentar hier steht, der zum Zeitpunkt des Schreibens dieses Artikels 150 Mal positiv bewertet wurde. Es unterliegt ReDoS. Das spielt in vielen Fällen keine Rolle, könnte aber ein großes Problem darstellen, wenn Sie dies (zum Beispiel) in serverseitigem Node.js-Code verwenden.

    – Trab

    12. Dezember 2021 um 2:07 Uhr

  • @Trott können Sie eine Antwort vorschlagen, die für diesen Angriff nicht anfällig ist?

    – Gourav

    14. Dezember 2021 um 6:59 Uhr


  • @Gourav function removeAllTrailingSlashes(str) {let i = str.length; while (str[--i] === '/'); return str.slice(0, i+1);}

    – Trab

    14. Dezember 2021 um 12:09 Uhr


Benutzer-Avatar
DiebMeister

function stripTrailingSlash(str) {
    if(str.substr(-1) === "https://stackoverflow.com/") {
        return str.substr(0, str.length - 1);
    }
    return str;
}

Hinweis: IE8 und älter unterstützen keine negativen Substr-Offsets. Verwenden str.length - 1 stattdessen, wenn Sie diese alten Browser unterstützen müssen.

  • Wirklich wie die Verwendung des Begriffs “alt” hier.

    – Seitenquelltext

    26. November 2019 um 20:00 Uhr

  • function stripTrailingSlash(str) { if(str.startsWith(“/”)) { return str.substr(1, str.length – 1); } Str zurückgeben; } NICHT FÜR IE8… wer benutzt überhaupt IE8?

    – Mitja Gustin

    15. Oktober 2021 um 11:59 Uhr


Benutzer-Avatar
Seth Holladay

ES6 / ES2015 bietet eine API zum Abfragen, ob eine Zeichenfolge mit etwas endet, was das Schreiben einer saubereren und besser lesbaren Funktion ermöglicht.

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

  • beste Lösung in 2019 🤙

    – Paul Rad

    25. Februar 2019 um 1:27 Uhr

  • @PaulRad Bei Verwendung dieses Sols wird das Problem des Zweigs str.slice (0, -1) für diese Zeile beim Komponententest nicht behandelt. Wie kann man das beheben?

    – Bijay Rai

    26. Juni 2020 um 3:12 Uhr

  • @BijayRai das bedeutet, dass Ihren Tests ein Fall fehlt, in dem str endet mit a / Schrägstrich. Sie sollten zwei Behauptungen (oder zwei Tests) haben, eine mit Schrägstrich und eine ohne.

    – Seth Holladay

    14. Juli 2020 um 21:43 Uhr

Benutzer-Avatar
ChronosLLC

Ich würde einen regulären Ausdruck verwenden:

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

Stellen Sie sicher, dass die Variable site ist aber eine Zeichenfolge.

Basierend auf der Antwort von @vdegenne … wie man sich auszieht:

Einfacher abschließender Schrägstrich:

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

Einzelne oder aufeinanderfolgende abschließende Schrägstriche:

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

Einfacher führender Schrägstrich:

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

Einzelne oder aufeinanderfolgende führende Schrägstriche:

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

Einzelne führende und abschließende Schrägstriche:

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

Einzelne oder aufeinanderfolgende führende und abschließende Schrägstriche:

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

Um sowohl Schrägstriche als auch zu handhaben der RückenSchrägstriche, ersetzen Instanzen von \/ mit [\\/]

  • Einige der Lösungen hier, wie z /\/+$/g sind anfällig für ReDoS, daher ist beispielsweise bei der Verwendung von serverseitigem Code Vorsicht geboten.

    – Trab

    12. Dezember 2021 um 2:11 Uhr

Ich weiß, dass es bei der Frage um abschließende Schrägstriche geht, aber ich habe diesen Beitrag bei meiner Suche nach trimmenden Schrägstrichen gefunden (sowohl am Ende als auch am Kopf eines Zeichenfolgenliterals), da die Leute diese Lösung benötigen würden, poste ich hier einen:

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

AKTUALISIEREN:

wie @Stefan R In den Kommentaren erwähnt, würden Sie schreiben, wenn Sie sowohl Schrägstriche als auch Backslashes sowohl am Ende als auch am Kopf eines Zeichenfolgenliterals entfernen möchten:

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

  • Einige der Lösungen hier, wie z /\/+$/g sind anfällig für ReDoS, daher ist beispielsweise bei der Verwendung von serverseitigem Code Vorsicht geboten.

    – Trab

    12. Dezember 2021 um 2:11 Uhr

Benutzer-Avatar
1ven

Dieser Ausschnitt ist genauer:

str.replace(/^(.+?)\/*?$/, "$1");
  1. Es streift nicht / Zeichenfolgen, da es sich um eine gültige URL handelt.
  2. Es entfernt Zeichenfolgen mit mehreren abschließenden Schrägstrichen.

  • Dies kann zwar ein gültiger Ansatz zum Entfernen mehrerer Schrägstriche sein, dies ist jedoch nicht die Anforderung des OP.

    – Jon L.

    18. April 2019 um 15:30 Uhr

  • @JonL. Viele Leute durchsuchen den Stapelüberlauf, um eine Antwort zu finden. Ich finde diese Antwort hilfreicher als die akzeptierte Antwort.

    – Ronnel Martínez

    3. März 2020 um 21:09 Uhr

  • Ich denke, das ist einfacher -> (.+?)\/+$. Keine Notwendigkeit zu verwenden ^ zunächst weil . wird sowieso von Anfang an suchen, keine Notwendigkeit zu verwenden *? bei vorher $ weil es die ursprüngliche Zeichenfolge zurückgibt, wenn das Regex-Muster nicht übereinstimmt.

    – Arztgu

    21. Oktober 2020 um 5:52 Uhr

  • Diese Antwort ist sehr anfällig für ReDos und sollte wahrscheinlich in serverseitigem Code und anderen Kontexten vermieden werden, in denen ReDoS-Angriffe ein Problem darstellen.

    – Trab

    12. Dezember 2021 um 2:13 Uhr

1310530cookie-checkRückgabezeichenfolge ohne nachgestellten Schrägstrich

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy