Как получить имя файла по полному пути, используя JavaScript? - PullRequest
263 голосов
/ 08 января 2009

Есть ли способ получить последнее значение (на основе символа '\') из полного пути?

Пример:

C:\Documents and Settings\img\recycled log.jpg

В этом случае я просто хочу получить recycled log.jpg из полного пути в JavaScript.

Ответы [ 18 ]

606 голосов
/ 08 января 2009
var filename = fullPath.replace(/^.*[\\\/]/, '')

Это будет обрабатывать оба пути \ OR / in

86 голосов
/ 09 августа 2014

Просто ради производительности я проверил все ответы, приведенные здесь:

var substringTest = function (str) {
    return str.substring(str.lastIndexOf('/')+1);
}

var replaceTest = function (str) {
    return str.replace(/^.*(\\|\/|\:)/, '');
}

var execTest = function (str) {
    return /([^\\]+)$/.exec(str)[1];
}

var splitTest = function (str) {
    return str.split('\\').pop().split('/').pop();
}

substringTest took   0.09508600000000023ms
replaceTest   took   0.049203000000000004ms
execTest      took   0.04859899999999939ms
splitTest     took   0.02505500000000005ms

И победителем стал ответ Split and Pop , благодаря bobince !

58 голосов
/ 08 января 2009

С какой платформы идет путь? Пути Windows отличаются от путей POSIX, отличаются от путей Mac OS 9, отличаются от путей ОС RISC, которые отличаются ...

Если это веб-приложение, в котором имя файла может быть с разных платформ, единого решения не существует. Однако разумным ударом является использование в качестве разделителей пути как «\» (Windows), так и «/» (Linux / Unix / Mac, а также альтернатива в Windows). Вот не-RegExp версия для дополнительного удовольствия:

var leafname= pathname.split('\\').pop().split('/').pop();
54 голосов
/ 28 июня 2015

В Node.js вы можете использовать Модуль разбора пути ...

var path = require('path');
var file = '/home/user/dir/file.txt';

var filename = path.parse(file).base;
//=> 'file.txt'
27 голосов
/ 27 июня 2009

Ates, ваше решение не защищает от пустой строки в качестве ввода. В этом случае происходит сбой с TypeError: /([^(\\|\/|\:)]+)$/.exec(fullPath) has no properties.

bobince, вот версия nickf, которая обрабатывает разделители пути DOS, POSIX и HFS (и пустые строки):

return fullPath.replace(/^.*(\\|\/|\:)/, '');
16 голосов
/ 17 января 2012

Следующая строка кода JavaScript даст вам имя файла.

var z = location.pathname.substring(location.pathname.lastIndexOf('/')+1);
alert(z);
10 голосов
/ 09 января 2009

Не более кратко, чем ответ Никфа , но этот непосредственно "извлекает" ответ вместо замены ненужных частей пустой строкой:

var filename = /([^\\]+)$/.exec(fullPath)[1];
8 голосов
/ 21 ноября 2014

Вопрос с вопросом «получить имя файла без расширения» приведен здесь, но для этого нет решения Вот решение, модифицированное из решения Бобби.

var name_without_ext = (file_name.split('\\').pop().split('/').pop().split('.'))[0];
2 голосов
/ 25 января 2017

Я использую:

var lastPart = path.replace(/\\$/,'').split('\\').pop();

Он заменяет последний \, поэтому он также работает с папками.

2 голосов
/ 19 июля 2009
<script type="text/javascript">
    function test()
    {
        var path = "C:/es/h221.txt";
        var pos =path.lastIndexOf( path.charAt( path.indexOf(":")+1) );
        alert("pos=" + pos );
        var filename = path.substring( pos+1);
        alert( filename );
    }
</script>
<form name="InputForm"
      action="page2.asp"
      method="post">
    <P><input type="button" name="b1" value="test file button"
    onClick="test()">
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...