¿Cómo recortar una extensión de archivo de una cadena en JavaScript?
Por ejemplo, suponiendo que x = filename.jpg
quiero obtener filename
dónde filename
podría estar cualquier nombre de archivo (supongamos que el nombre del archivo solo contiene [a-zA-Z0-9-_] para simplificar).
Lo vi x.substring(0, x.indexOf('.jpg'))
en DZone Snippets , pero ¿no x.substring(0, x.length-4)
funcionaría mejor? Porque length
es una propiedad y no verifica los caracteres, mientras que indexOf()
es una función y verifica los caracteres.
No estoy seguro de qué funcionaría más rápido, pero sería más confiable cuando se trata de extensiones como .jpeg
o.html
x.replace(/\.[^/.]+$/, "")
En node.js , el nombre del archivo sin extensión se puede obtener de la siguiente manera.
const path = require('path');
const filename = 'hello.html';
path.parse(filename).name; //=> "hello"
path.parse(filename).ext; //=> ".html"
path.parse(filename).base; //=> "hello.html"
Explicación adicional en la página de documentación de Node.js.
Si conoce la longitud de la extensión, puede usar x.slice(0, -4)
(donde 4 son los tres caracteres de la extensión y el punto).
Si no conoce la longitud, la expresión regular @John Hartsock sería el enfoque correcto.
Si prefiere no utilizar expresiones regulares, puede probar esto (menos eficaz):
filename.split('.').slice(0, -1).join('.')
Tenga en cuenta que fallará en archivos sin extensión.
x.length-4
Sólo tiene en cuenta extensiones de 3 caracteres. ¿Qué pasa si tienes filename.jpeg
o filename.pl
?
EDITAR:
Para responder... claro, si siempre tienes una extensión de .jpg
, x.length-4
funcionaría bien.
Sin embargo, si no conoce la duración de su extensión, cualquiera de varias soluciones es mejor o más sólida.
x = x.replace(/\..+$/, '');
O
x = x.substring(0, x.lastIndexOf('.'));
O
x = x.replace(/(.*)\.(.*?)$/, "$1");
O (asumiendo que el nombre del archivo solo tiene un punto)
parts = x.match(/[^\.]+/);
x = parts[0];
O (también con un solo punto)
parts = x.split(".");
x = parts[0];
Me gusta este porque es de una sola línea y no es demasiado difícil de leer:
filename.substring(0, filename.lastIndexOf('.')) || filename