Wie erhalte ich den letzten Ordnernamen aus dem Ordnerpfad in Javascript?

Lesezeit: 4 Minuten

Geben Sie in Javascript/jquery einen Pfad zu einem Ordner wie dem folgenden an:

"http://www.blah/foo/bar/" 

oder

"http://www.blah/foo/bar" (this one doesn't have a slash in the end)

Wie können Sie den Namen des letzten Ordners extrahieren? In diesem Fall wäre es so "bar".

Gibt es einen einfachen Weg durch eine eingebaute Funktion?

Danke.

Denys Ségurets Benutzeravatar
Denys Séguret

Nutzen Sie die Kraft des regulären Ausdrucks:

var name = path.match(/([^\/]*)\/*$/)[1]

Beachten Sie, dass dies nicht der letzte „Ordner“ ist (der in Ihrem Fall und im allgemeinen Fall einer URL nicht definiert ist), sondern das letzte Pfad-Token.

  • das wird wiederkommen bar/ wenn Pfad hat / schließlich

    – Adil Shaikh

    22. Mai 2013 um 15:13

  • @pXL behoben (fehlerhaftes Kopieren und Einfügen)

    – Denys Séguret

    22. Mai 2013 um 15:14

  • Hinweis: (Titel lautet: „So erhalten Sie den letzten Ordnernamen“) Das Obige wird zurückgegeben about.html zum Beispiel: /foo/bar/about.html

    – Roko C. Buljan

    16. September 2014 um 14:33

  • @RokoC.Buljan Richtig. Aber ich denke, das war es, was OP verlangt hat.

    – Denys Séguret

    16. September 2014 um 14:36 ​​Uhr

  • @dystroy ja gib mir5! Es war keine Kritik, nur eine NB 🙂 🙂

    – Roko C. Buljan

    16. September 2014 um 14:37 Uhr


David Fregolis Benutzeravatar
David Fregoli

Verwenden Sie reguläre Ausdrücke! oder:

var arr="http://www.blah/foo/bar/".split("https://stackoverflow.com/");
var last = arr[arr.length-1] || arr[arr.length-2];

das macht aus ‘http://www.blah/foo/bar////‘ :p (oder stürzt den Browser ab)

var arr="http://www.blah/foo/bar/////".split("https://stackoverflow.com/");
var last = (function trololol(i) {
  return arr[i] || trololol(i-1);
})(arr.length-1);

  • rekursive Funktion dann :p

    – David Fregoli

    22. Mai 2013 um 15:12

  • @Matt Das sieht nicht wirklich nach einem Pfad aus. Was soll das Ergebnis sein?

    – Denys Séguret

    22. Mai 2013 um 15:14


  • @dystroy Es dürfen ein (gültiger und funktionierender) Pfad auf der Serverseite sein und Adressen dynamisch generieren …

    Benutzer1823761

    22. Mai 2013 um 15:16

  • @dystroy: Es war größtenteils ein unbeschwerter Kommentar, aber entweder eine leere Zeichenfolge oder der „Balken“, denke ich, je nachdem, welcher Anwendungsfall das OP verwendet. Das Format funktioniert immer noch auf den meisten (allen?) Webservern. Ich bin mir nicht sicher, ob es irgendwo Teil einer Spezifikation ist.

    – Matt

    22. Mai 2013 um 15:20 Uhr


  • Es sieht so aus, als würden Sie gerne reguläre Ausdrücke kennenlernen. Eine gute Möglichkeit zu lernen ist das Anschauen [regex] Stellen Sie Fragen zu SO und versuchen Sie, die Antwort zu finden, ohne sich die anderen anzusehen (zumindest bis Sie genug versucht haben). Schauen Sie sich dabei am besten um Diese Seite.

    – Denys Séguret

    22. Mai 2013 um 16:02 Uhr

Schau dir das an:

var lastFolder = location.href.split("https://stackoverflow.com/").filter(function(el) { 
    return el.trim().length > 0; 
}).pop();

alert( location.href.split("https://stackoverflow.com/").filter(function(el) { return el.trim().length > 0; }).pop() );
alert( location.href );

var test = "http://www.blah/foo/bar/" ;
alert( test.split("https://stackoverflow.com/").filter(function(el) { return el.trim().length > 0; }).pop() );

var myString = "http://www.blah/foo/bar";
var pathElements = myString.replace(/\/$/, '').split("https://stackoverflow.com/");
var lastFolder = pathElements[pathElements.length - 1];

Dies ist reines JavaScript und benötigt kein jQuery.

Normalerweise verwende ich die Kombination von split Und pop In Javascript ist es bereits sauber, da ich normalerweise die Ordneradressen von aws s3 erhalte:

const teststring = 'image_1/ArtService/GB/ART-123/dependants/ASM-123';
const folder = teststring.split("https://stackoverflow.com/").pop();
console.log('folder:', folder);// ASM-123

Sie können die Zeichenfolge in eine Liste aufteilen und über eine Funktion das letzte Element in der Liste abrufen.

function checkString(stringToCheck) {
    var list1 = stringToCheck.split("https://stackoverflow.com/");
    if (list1[list1.length - 1].length < 1) {
        var item = list1[list1.length - 2]
    } else {
       var item = list1[list1.length - 1];
    }
    $('#results').append('Last Folder in '+stringToCheck+': <b>'+item+'</b><br>');

}

Von dort aus finden Sie das letzte eigentliche Element.

JSFiddle-Beispiel

Obwohl dies möglicherweise nicht die eleganteste Antwort ist, scheint sie für jemanden, der sich mit regulären Ausdrücken möglicherweise nicht auskennt, am einfachsten zu verstehen zu sein.

JSFiddle wurde aktualisiert, um die Ergebnisse anzuzeigen.

var str = "...";
var segments = str.split("https://stackoverflow.com/");
var lastDir = (segments.length > 1) ? segments[segments.length - 2] : "";

Das erste Beispiel ergibt „bar“. Das zweite Beispiel ergibt „foo“.

Wenn Sie den abschließenden Schrägstrich ignorieren und das letzte Segment auch als Ordner betrachten möchten, reicht eine leichte Änderung an RegExp von @bdesham aus:

var segments = str.replace(/\/+$/, '').split("https://stackoverflow.com/");
var lastDir = (segments.length > 0) ? segments[segments.length - 1] : "";

  • Ich habe Ihre Antwort für Sie formatiert. Achten Sie beim Bearbeiten auf die Schaltflächen in der Symbolleiste.

    – Denys Séguret

    22. Mai 2013 um 15:20 Uhr

  • @dystroy Danke, ich glaube, ich habe den Abschlag von GitHub vermasselt.

    – LexLythius

    22. Mai 2013 um 15:28

  • Ich denke, was Sie tun möchten, ist nicht korrekt, da der abschließende Schrägstrich bedeutet, dass das letzte Segment ein Verzeichnis ist (die einzige wirkliche syntaktische Möglichkeit, einzelne Ordner und Dateien zu erkennen), und das könnte Sie in Schwierigkeiten bringen, wenn Sie etwas RESTful damit machen Das. Ich werde meine Antwort jedoch bearbeiten

    – LexLythius

    22. Mai 2013 um 22:46

1452020cookie-checkWie erhalte ich den letzten Ordnernamen aus dem Ordnerpfad in Javascript?

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

Privacy policy