Получить значение строки после косой черты в JavaScript

113

Я уже пытаюсь больше часа и не могу придумать, как это сделать, хотя, вероятно, это довольно просто:

У меня примерно так: foo/bar/test.html

Я хотел бы использовать jQuery для извлечения всего, что находится после последнего /. В приведенном выше примере вывод будет test.html.

Думаю, это можно сделать с помощью substrи indexOf(), но я не могу найти рабочего решения.

r0skar
источник

Ответы:

245

Как минимум три способа:

Регулярное выражение:

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 и производительности, так как двигатели меняются так радикально друг от друга), но если вы делаете это тысячи раз в цикле, это Безразлично Это не имеет значения, и я буду стремиться к ясности кода.

TJ Crowder
источник
1
Как бы вы приспособили это, чтобы вернуть строку перед последней косой чертой? (Т.е. вернуть имя родительской папки)
wbadart
28

Вам не нужен jQuery, и есть несколько способов сделать это, например:

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

Где myString содержит вашу строку.

Том Уолтерс
источник
3
+1 (за работу), указывая на то, что jQuery не является комплексным решением проблем с javascript.
Эндрю Джекман
1
Это глючное решение, попробуйте, что будет, если добавить косую черту к slug? Возвращает 0. А что получается нет слага? - возвращает NaN! WTF?
неверный
1) Вопрос был связан с входом, который не был нулевым 2) Ввод был связан с входами, оканчивающимися на имена файлов (без косой черты) 3) Принятый ответ действительно является гораздо лучшим решением, отсюда многочисленные голоса за 4) Вы можете добавить свое собственное решение
Том Уолтерс
12
var str = "foo/bar/test.html";
var lastSlash = str.lastIndexOf("/");
alert(str.substring(lastSlash+1));
касдега
источник
9

Пытаться;

var str = "foo / bar / test.html";
var tmp = str.split ("/");
предупреждение (tmp.pop ());
Судхир Бастакоти
источник
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 в строке пути.

AndroidGeek
источник
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);

Заменить "_" || '/' для ваших нужд

SMPLYJR
источник
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);
  }
Вишал Кумар
источник
0

Попробуй это:

const url = "files/images/gallery/image.jpg";

console.log(url.split("/").pop());

Патриция Петрик
источник
Это решение уже есть в принятом ответе, как третье возможное решение
β.εηοιτ.βε