Як атрымаць апошняе імя папкі з шляху да тэчцы ў JavaScript?

У JavaScript/JQuery, даў шлях да тэчцы, як:

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

або

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

Як вы можаце атрымаць імя апошняй тэчкі? У гэтым выпадку было б «бар» .

Ёсць просты спосаб праз убудаваную функцыю?

Дзякуючы.

9

7 адказы

Выкарыстоўвайце сілу назваў паведамленняў:

var name = path.match(/([^\/]*)\/*$/)[1]
22
дададзена
@dystroy ды gimme5! Гэта не крытыка, проста <�я> N.B. :)
дададзена аўтар Roko C. Buljan, крыніца
Заўвага: (Назва кажа: «Як атрымаць апошняе імя папкі») вышэй будзе вяртаць about.html для т.е: /foo/bar/about.html
дададзена аўтар Roko C. Buljan, крыніца
@ RokoC.Buljan справа. Але я думаю, што гэта было тое, што ОП прасілі.
дададзена аўтар Denys Séguret, крыніца
@pXL фіксаваныя (дрэнныя копипасты)
дададзена аўтар Denys Séguret, крыніца
гэта верне Бар/, калі шлях мае / у рэшце рэшт,
дададзена аўтар Mohammad Adil, крыніца

Выкарыстанне рэгулярных выразаў! альбо:

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

гэта тлумачыць « Http: //www.blah/foo/bar//// ': р (або збой браўзэра)

var arr = 'http://www.blah/foo/bar/////'.split('/');
var last = (function trololol(i) {
  return arr[i] || trololol(i-1);
})(arr.length-1);
4
дададзена
@ Matt Гэта не вельмі падобны на шлях. Якім павінен быць вынік?
дададзена аўтар Denys Séguret, крыніца
Падобна на тое, што вы хацелі б ведаць рэгулярныя выразы. Добры спосаб навучыцца глядзець на [рэгулярных выразаў] пытанні аб SO і паспрабаваць знайсці адказ, ня гледзячы на ​​астатніх (па меншай меры да таго часу, пакуль спрабаваў дастаткова). У працэсе вы б лепш паглядзець на гэтага сайта .
дададзена аўтар Denys Séguret, крыніца
@dystroy: гэта было ў асноўным бесклапотны каментар, але альбо пусты радок або «бар» Я думаю, у залежнасці ад таго, што ФОС выкарыстоўваць выпадак. Фармат да гэтага часу працуе на большасці (усе?) Вэбсервер. Не ўпэўнены, што, калі яго частка спецыфікацыі недзе.
дададзена аўтар Matt, крыніца
<�Код> HTTP: //www.blah/foo/bar//// . Muahahahahaa.
дададзена аўтар Matt, крыніца
@ Matt шчаслівым цяпер?
дададзена аўтар David Fregoli, крыніца
рэкурсіўная функцыя тады: р
дададзена аўтар David Fregoli, крыніца
@dystroy Гэта <�б> можа быць (дзейнічае і працуе) шлях у бок сервера і генерацыі адрасы дынамічна ...
дададзена аўтар user1823761, крыніца
var myString = "http://www.blah/foo/bar";
var pathElements = myString.replace(/\/$/, '').split('/');
var lastFolder = pathElements[pathElements.length - 1];

Гэта чысты JavaScript і не патрабуе JQuery.

2
дададзена
@NOX Гэты шлях можа ці не можа быць эквівалентная шляху без задняй касой рысы; гэта залежыць ад вэб-сервера. Увогуле, вы не можаце проста ігнараваць дадатковыя слеш.
дададзена аўтар bdesham, крыніца
@NOX Не, яны не абавязкова супадаюць. Гэта мая кропка.
дададзена аўтар bdesham, крыніца
На маім сайце, размешчаным на сэрвэры Amazon S3, bdesham.info працуе выдатна, а bdesham.info// дае памылку.
дададзена аўтар bdesham, крыніца
Што наконт Http: //www.blah/foo/bar// ?
дададзена аўтар user1823761, крыніца
WOW, гэта сапраўды цікава, дзякуй вам;)
дададзена аўтар user1823761, крыніца
Я ніколі не бачыў такога, што вы можаце паказаць мне прыклад? Я тэставаў ў IIS і вэб-сервераў Apache, і шляхі аднолькавыя.
дададзена аўтар user1823761, крыніца
Так, вы маеце рацыю, але гэтыя шляхі Бар/ і бар// і бар /// адны і тыя ж, не?
дададзена аўтар user1823761, крыніца
вялікае каханне! менавіта тое, што я шукаў
дададзена аўтар moesphemie, крыніца

Паглядзіце на гэта:

var lastFolder = location.href.split('/').filter(function(el) { 
    return el.trim().length > 0; 
}).pop();

<div class="snippet" data-lang="js" data-hide="true"> <div class="snippet-code snippet-currently-hidden">

alert( location.href.split('/').filter(function(el) { return el.trim().length > 0; }).pop() );
alert( location.href );

var test = "http://www.blah/foo/bar/" ;
alert( test.split('/').filter(function(el) { return el.trim().length > 0; }).pop() );
</div> </div>
2
дададзена

Вы можаце разбіць радок у спіс і захапіць апошні элемент у спісе з дапамогай функцыі.

function checkString(stringToCheck) {
    var list1 = stringToCheck.split('/');
    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+': '+item+'
');

}

Адтуль вы можаце знайсці апошні фактычны элемент.

Прыклад JSFiddle

Хоць гэта можа быць не самы элегантны адказ, гэта, здаецца, лягчэй за ўсё зразумець, для каго-то, што можа не ведаць рэгулярныя выразы.

<�Моцны> Абноўлены JSFiddle для адлюстравання вынікаў.

0
дададзена
Проста адпраўце код тут.
дададзена аўтар bdesham, крыніца
Woops. сказаў jQuery замест простага Js ...
дададзена аўтар David Ziemann, крыніца
var str = "...";
var segments = str.split("/");
var lastDir = (segments.length > 1) ? segments[segments.length - 2] : "";

Першы прыклад дае «бар». Другі прыклад дае «Foo».

Калі вы хочаце, каб ігнараваць завяршальны слэш і разгледзяць апошні сегмент у выглядзе папкі, а таксама, то невялікая падладка к @ bdesham-х RegExp робіць трук:

var segments = str.replace(/\/+$/, '').split('/');
var lastDir = (segments.length > 0) ? segments[segments.length - 1] : "";
0
дададзена
Я адфарматаваны ваш адказ для вас. Паглядзіце на кнопкі на панэлі інструментаў пры рэдагаванні.
дададзена аўтар Denys Séguret, крыніца
@dystroy Дзякуй, я пераблытала ўцэнкі з GitHub я думаю.
дададзена аўтар LexLythius, крыніца
Я думаю, што вы хочаце зрабіць, гэта не правільна, бо завяршальны слэш не азначае, што апошні сегмент з'яўляецца каталогам (адзіным рэальным сінтаксічны спосаб сказаць аппарт тэчкі і файлы), і якія могуць атрымаць вас у непрыемнасці, калі вы робіце нешта RESTful з гэта. Я буду кіраваць мой адказ, хоць
дададзена аўтар LexLythius, крыніца
@LexLythius пункту з'яўляецца тое, што ён заўсёды павінен вяртаць бар ....
дададзена аўтар David Fregoli, крыніца

Простае рэгулярны выраз можа зрабіць працу

var s = "toto1/toto2/toto3toto1/totofinale/";

s.replace(/^.*\/([^\/]+\/)$/, "$1")
0
дададзена