2010-03-26 2 views
21

У меня есть полный путь к изображению, которое я использую jquery для чтения в форме $('img.my_image').attr('src'), однако мне просто нужна часть имени файла (отбрасывание пути).Получение только имени файла с помощью Javascript

Есть ли какие-либо встроенные функции для этого, или будет ли регулярное выражение единственным вариантом?

+0

http://stackoverflow.com/questions/1302306/how-to-pull-the-file-name-from-a-url-using-javascript-jquery/1302339#1302339 – Gregoire

+0

ааа круто, я но поиск был, вероятно, filename! = имя файла заставило меня не находить его. – DCD

ответ

40
var fileNameIndex = yourstring.lastIndexOf("/") + 1; 
var filename = yourstring.substr(fileNameIndex); 
+2

не работает для linux и mac, вам нужно разделить (\ и /); – RubbelDeCatc

+0

Ответ RubbelDeCatc ниже подходит как для прямой, так и для обратной косой черты, если вам нужно кросс-платформенное решение. – user1404617

7
function getFileName(path) { 
return path.match(/[-_\w]+[.][\w]+$/i)[0]; 
} 
3

В Javascript вы могли бы сделать

function getFileNameFromPath(path) { 
    var ary = path.split("/"); 
    return ary[ary.length - 1]; 
} 
51
var Filename= path.split('/').pop() 
+1

Это ... гениально! –

+2

Это, на мой взгляд, лучше, чем принятый ответ. – Marquizzo

+0

Я думаю, что это должно быть так: имя файла Filename = path.split ('\\'). Pop(); Он проверяет приведенный выше код и не работает для IE и смартфона. – Moe

2

Я нашел лучший вариант обработки Unix и Windows, как путь-строки.

Номер 1:

var unix_path = '/tmp/images/cat.jpg'; 
console.log(unix_path.replace(/^.*[\\\/]/, '')); 

var win_path = 'c:\\temp\images\cat.jpg'; 
console.log(win_path.replace(/^.*[\\\/]/, '')); 

Выход будет cat.jpg

Номер 2: (может быть быстрее)

var unix_path = '/tmp/images/cat.jpg'; 
console.log(unix_path.split(/[\\\/]/).pop()); 

var win_path = 'c:\\temp\images\cat.jpg'; 
console.log(win_path.split(/[\\\/]/).pop()); 

выход будет кошка. jpg

+0

Первый метод объединит полный путь к одной строке без косой черты для пути Windows. –

+0

@ManuM При тестировании этих строк строковыми литералами вы должны использовать двойную обратную косую черту в своей строке, например 'var win_path = 'c: \\ temp \\ images \\ cat.jpg';'. В противном случае они не будут интерпретироваться как обратная косая черта с помощью JavaScript. – user1404617

+0

Извините, я никогда не тестировал его с окнами, но, возможно, проблема двойных bs с пути к окну вызвана тремя обратными косыми чертами (\\\) в регулярном выражении. – RubbelDeCatc

0

Используя это решение, вы можете получить оба имени, то есть с расширением файла и без него.

 

    //getting image source 
    var path=$('img.my_image').attr('src'); 

    //splitting url and getting filename with file extension 
    var file=path.split('/').pop(); 

    //removing extension and keeping just the filename 
    var filename=file.split('.').shift(); 

Смежные вопросы