Отримайте значення рядка після косої риски в JavaScript


112

Я вже намагаюся більше години і не можу з’ясувати правильний спосіб зробити це, хоча це, мабуть, досить просто:

У мене є щось подібне: foo/bar/test.html

Я хотів би використовувати jQuery, щоб витягти все після останнього /. У наведеному вище прикладі результат буде test.html.

Я припускаю , що це може бути зроблено з допомогою substrі indexOf(), але я не можу знайти робоче рішення.

Відповіді:


243

Принаймні три способи:

Регулярний вираз:

var result = /[^/]*$/.exec("foo/bar/test.html")[0];

... що говорить "схопити ряд символів, що не містять косу рису" ( [^/]*) в кінці рядка ( $). Потім він захоплює відповідні символи з повернутого об'єкта відповідності, індексуючи його ( [0]); в об'єкті відповідності перший запис - це весь відповідний рядок. Немає необхідності в захопленні груп.

Живий приклад

Використання lastIndexOfта substring:

var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);

lastIndexOfробить те, що звучить так, як це робить: Він знаходить індекс останнього виникнення символу (ну, рядок) у рядку, повертаючи -1, якщо його не знайдено. Дев'ять разів з десяти, ви, ймовірно, хочете перевірити це значення повернення ( if (n !== -1)), але в вищевикладеному, оскільки ми додаємо до нього 1 і викликаємо підрядку, ми в кінцевому підсумку робитимемо це, str.substring(0)що просто повертає рядок.

Використання Array#split

Судір і Том Уолтерс висвітлювали це тут і тут , але лише для повноти:

var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();

split розбиває рядок, використовуючи даний роздільник, повертаючи масив.

lastIndexOf/ substringРішення , ймовірно , є найбільш ефективним (хоча один завжди повинен бути обережним сказати що - небудь про JavaScript і продуктивності, так як двигуни змінюються так радикально один від одного), але якщо ви робите це тисячі разів в циклі, це Байдуже Неважливо, і я б прагнув ясності коду.


1
Як би ви пристосували це для повернення рядка до остаточної косої риски? (Тобто поверніть ім’я батьківської папки)
wbadart

28

Вам не потрібен jQuery, і існує маса способів зробити це, наприклад:

var parts = myString.split('/');
var answer = parts[parts.length - 1];

Там, де myString містить ваш рядок.


3
+1 (для роботи), вказуючи, що jQuery - це не всебічне рішення проблем JavaScript.
Ендрю Джекман

1
Це баггічне рішення, спробуйте, що станеться, якщо ви додасте косу рису до кулі? Він повертається 0. А що трапиться, то кулі немає? - повертає NaN! wtf? поганий код
Donatas Cereska

1) Питання стосувалося вводу, який не був нульовим. 2) Вхід стосувався входів, що закінчуються іменами файлів (без косої риски) 3) Прийнята відповідь справді є набагато кращим рішенням, отже, численні голоси 4) Ви можете додати власне рішення
Том Уолтерс,

12
var str = "foo/bar/test.html";
var lastSlash = str.lastIndexOf("/");
alert(str.substring(lastSlash+1));


5

Коли я знаю, що рядок буде досить коротким, я використовую наступний вкладиш ...

// if str is C:\windows\file system\path\picture name.jpg
alert( str.split('\\').pop() );

оповіщення спливає picture name.jpg


2
String path ="AnyDirectory/subFolder/last.htm";
int pos = path.lastIndexOf("/") + 1;

path.substring(pos, path.length()-pos) ;

Тепер у вас є last.htm у рядку шляху.


1

легкий вагу

string.substring(start,end)

де

start = Required. Положення, з якого почати видобуток. Перший символ знаходиться в індексі 0`.

end = Optional. Положення (до, але не включаючи), де закінчити видобуток. Якщо пропущено, він витягує решту рядка.

    var string = "var1/var2/var3";

    start   = string.lastIndexOf('/');  //console.log(start); o/p:- 9
    end     = string.length;            //console.log(end);   o/p:- 14

    var string_before_last_slash = string.substring(0, start);
    console.log(string_before_last_slash);//o/p:- var1/var2

    var string_after_last_slash = string.substring(start+1, end);
    console.log(string_after_last_slash);//o/p:- var3

АБО

    var string_after_last_slash = string.substring(start+1);
    console.log(string_after_last_slash);//o/p:- var3

1

Jquery:

var afterDot = value.substr(value.lastIndexOf('_') + 1);

Javascript:

var myString = 'asd/f/df/xc/asd/test.jpg'
var parts    = myString.split('/');
var answer   = parts[parts.length - 1];
console.log(answer);

Замініть '_' || '/' на власні потреби


1

Відповідно до запитання:

var string1= "foo/bar/test.html";
  if(string1.contains("/"))
  {
      var string_parts = string1.split("/");
    var result = string_parts[string_parts.length - 1];
    console.log(result);
  }  

і для запитань на URL-адресу (запитували про виникнення '=') ::
[ http://stackoverflow.com/questions/24156535/how-to-split-a-string-after-a-particular-character-in -jquery] [1]

var string1= "Hello how are =you";
  if(string1.contains("="))
  {
      var string_parts = string1.split("=");
    var result = string_parts[string_parts.length - 1];
    console.log(result);
  }

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.