Как обрезать расширение файла из строки в JavaScript? - PullRequest
246 голосов
/ 23 ноября 2010

Например, предполагая, что x = filename.jpg, я хочу получить filename, где filename может быть любым именем файла (Предположим, что имя файла содержит только [a-zA-Z0-9-_] для упрощения.).

Я видел x.substring(0, x.indexOf('.jpg')) на DZone Snippets , но не будет ли x.substring(0, x.length-4) работать лучше?Потому что length является свойством и не выполняет проверку символов, тогда как indexOf() является функцией и выполняет проверку символов.

Ответы [ 24 ]

0 голосов
/ 23 ноября 2010

Здесь пригодятся регулярные выражения!Метод Javascript .replace() будет принимать регулярное выражение, и вы можете использовать его для достижения желаемого:

// assuming var x = filename.jpg or some extension
x = x.replace(/(.*)\.[^.]+$/, "$1");
0 голосов
/ 23 ноября 2010

Я бы использовал что-то вроде x.substring (0, x.lastIndexOf ('.')). Если вы стремитесь к производительности, вообще не используйте javascript :-p Нет, еще одно утверждение не имеет значения для 99,99999% всех целей.

0 голосов
/ 23 ноября 2018

Сначала вы должны получить правильное расширение файла, затем вы можете удалить его

Попробуйте этот код

<!DOCTYPE html>
<html>
<body>
<p>Click the button to display the array values after the split.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
function getFileName(str){
    var res = str.split('.').pop();
    alert('filename: ' + str.replace('.' + res, ''));
    alert('extension: ' +res);
}
function myFunction() {
    getFileName('abc.jpg');
    getFileName('abc.def.jpg');
    getFileName('abc.def.ghi.jpg');
    getFileName('abc.def.ghi.123.jpg');
    getFileName('abc.def.ghi.123.456.jpg');
    getFileName('abc.jpg.xyz.jpg'); // test with Sébastien comment lol
}
</script>
</body>
</html>
0 голосов
/ 11 ноября 2015

Это код, который я использую для удаления расширения из имени файла без использования регулярных выражений или indexOf (indexOf не поддерживается в IE8).Предполагается, что расширением является любой текст после последнего '.'символ.

Работает для:

  • файлов без расширения: "myletter"
  • файлов с '.'в имени: "my.letter.txt"
  • неизвестная длина расширения файла: "my.letter.html"

Вот код:

var filename = "my.letter.txt" // some filename

var substrings = filename.split('.'); // split the string at '.'
if (substrings.length == 1)
{
  return filename; // there was no file extension, file was something like 'myfile'
}
else
{
  var ext = substrings.pop(); // remove the last element
  var name = substrings.join(""); // rejoin the remaining elements without separator
  name = ([name, ext]).join("."); // readd the extension
  return name;
}
...