String ohne abschließenden Schrägstrich zurückgeben


196

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?


Antworten:


477

Versuche dies:

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

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

13
"/".replace(/\/$/," ") wird" "sein. "/" ist ein gültiger Pfad und sollte nicht entfernt werden.
Puchu

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

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


Wirklich wie die Verwendung des Begriffs "alt" hier.
PageSource

47

ES6 / ES2015 bietet eine API für die Frage, ob eine Zeichenfolge mit etwas endet, wodurch eine sauberere und besser lesbare Funktion geschrieben werden kann.

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

3
beste Lösung im Jahr 2019 Paul
Paul Rad

@PaulRad Während der Verwendung dieser Lösung wird das Problem mit dem Zweig str.slice (0, -1) beim Komponententest für diese Zeile nicht behandelt. Wie kann man das beheben?
Bijay Rai

30

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

Sie sollten jedoch sicherstellen, dass die Variable siteeine Zeichenfolge ist.


3
Ich stimme voll und ganz zu, wann immer Sie Regex schreiben, sollte es in eine Funktion mit einem beschreibenden Namen oder mit Kommentaren eingeschlossen werden.
Eric Labashosky

11

Dieses Snippet ist genauer:

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

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

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

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

10

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

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

UPDATE :

Wie @Stephen 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 String-Literal entfernen möchten:

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

Das ist die wahre Antwort!
Kann PERK

1
Wenn Sie sowohl Schrägstriche als auch Schrägstriche kürzen möchten:.replace(/^[\\/]+|[\\/]+$/g, '')
Stephen R

2

Die Leichtigkeit, die ich kenne, ist diese

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

Dies wird dann am Ende nach einem / suchen und wenn es dort ist, entfernen Sie es, wenn es nicht ist, wird Ihre Zeichenfolge so zurückgegeben, wie sie war

Nur eine Sache, die ich noch nicht kommentieren kann @ThiefMaster wow, du interessierst dich nicht für das Gedächtnis, läufst du ein Substr nur für ein Wenn?

Die Berechnung für den auf Null basierenden Index für die Zeichenfolge wurde korrigiert.


2

Hier ein kleines URL-Beispiel.

var currentUrl = location.href;

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

Protokolliere die neue URL

console.log(currentUrl);

2

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

Einfacher abschließender Schrägstrich:

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

Einzelne oder aufeinanderfolgende nachgestellte Schrägstriche:

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

Einzelner führender Schrägstrich:

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

Einzelne oder aufeinanderfolgende führende Schrägstriche:

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

Einzelne führende und nachfolgende Schrägstriche:

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

Einzelne oder aufeinanderfolgende führende und nachfolgende Schrägstriche:

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

Ersetzen Sie Instanzen von durch , um sowohl Schrägstriche als auch Schrägstriche \/zu behandeln[\\/]


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

eine andere Lösung.


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

2
subtring? Außerdem wird der erste Schrägstrich und alles danach entfernt.
ThiefMaster

@ThiefMaster: Wirklich? Sie können nicht sagen, dass ich meinte substring? Ja, ich wollte auch den ersten Schrägstrich und alles danach entfernen, da er die Rechnung für die gestellten Fragen und Beispieldaten ausfüllt.
Josh.Trow

Nun, sein Kommentar besagt, dass er den
abschließenden

@ThiefMaster: Was nach seinen Beispielen mein Code tut.
Josh.trow

1
Nur ein Grund, warum Sie dies zu keinem Zeitpunkt verwenden sollten, wenn sich die URLs in "voll qualifiziert" ändern. Http: // dies funktioniert nicht und alle Links mit / in der Mitte funktionieren nicht für Googler
Barkermn01
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.