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


113

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

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

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

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

Ответы:


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


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) Вы можете добавить свое собственное решение
Том Уолтерс



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.