Por ejemplo, suponiendo que x = filename.jpg
, quiero llegar 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).
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 realiza la comprobación de caracteres, mientras que indexOf()
es una función y realiza la comprobación de caracteres.
Respuestas:
Si conoce la longitud de la extensión, puede usarla
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 de @John Hartsock sería el enfoque correcto.
Si prefiere no usar expresiones regulares, puede intentar esto (menos rendimiento):
Tenga en cuenta que fallará en archivos sin extensión.
fuente
.jpg
. Estaba buscando algo como Ruby'sx[0..-5]
, ¡y sex.slice(0, -4)
ve genial! ¡Gracias! ¡Y gracias a todos los demás por todas las otras alternativas robustas proporcionadas!"picture.jpeg".slice(0, -4)
-> "imagen".No estoy seguro de qué funcionaría más rápido, pero esto sería más confiable cuando se trata de extensiones como
.jpeg
o.html
fuente
En node.js , el nombre del archivo sin la extensión se puede obtener de la siguiente manera.
Explicación adicional en la página de documentación de Node.js.
fuente
var parsed = path.parse(filename)
seguido depath.join(parsed.dir, parsed.name)
.let base = path.basename( file_path, path.extname( file_path ) )
.x.length-4
solo representa extensiones de 3 caracteres. ¿Qué pasa si tienesfilename.jpeg
ofilename.pl
?EDITAR:
Para responder ... seguro, si siempre tiene una extensión de
.jpg
,x.length-4
funcionaría bien.Sin embargo, si no conoce la longitud de su extensión, cualquiera de varias soluciones es mejor / más sólida.
x = x.replace(/\..+$/, '');
O
x = x.substring(0, x.lastIndexOf('.'));
O
x = x.replace(/(.*)\.(.*?)$/, "$1");
O (con el supuesto nombre de archivo solo tiene un punto)
O (también con un solo punto)
fuente
var parts = full_file.split("."); var ext = parts[parts.length-1]; var file = parts.splice(0,parts.length-1).join(".");
x = x.substr(0, x.lastIndexOf('.'));
- Probablemente quisiste decirx = x.substring(0, x.lastIndexOf('.'));
?Quizás pueda usar la suposición de que el último punto será el delimitador de extensión.
Si el archivo no tiene extensión, devolverá una cadena vacía. Para arreglar eso use esta función
fuente
var f = x.substr(0, x.lastIndexOf('.')) || x;
Esto funciona porque una cadena vacía es falsa, por lo tanto, devuelve x.Me gusta este porque es un trazador de líneas que no es demasiado difícil de leer:
fuente
En las versiones de Node.js anteriores a 0.12.x:
path.basename(filename, path.extname(filename))
Por supuesto, esto también funciona en 0.12.xy posteriores.
fuente
path.parse
respuesta es más simple.Esto funciona, incluso cuando el delimitador no está presente en la cadena.
También se puede usar como una línea como esta:
EDITAR: Esta es una solución más eficiente:
fuente
No sé si es una opción válida, pero uso esto:
No solo conozco una operación, sino que al menos siempre debería funcionar.
ACTUALIZACIÓN: Si quieres un oneliner, aquí estás:
(name.split('.').slice(0, -1)).join('.')
fuente
hello.name.txt
regresahello, name
Otra frase:
fuente
Aquí hay otra solución basada en expresiones regulares:
Esto solo debería cortar el último segmento.
fuente
Uno simple:
fuente
La respuesta aceptada elimina solo la última parte de la extensión (
.jpeg
), que podría ser una buena opción en la mayoría de los casos.Una vez tuve que quitar todas las extensiones (
.tar.gz
) y los nombres de los archivos estaban restringidos para no contener puntos (por2015-01-01.backup.tar
lo que no sería un problema):fuente
fuente
path/name.ext
-> enpaht/name
lugar de solo regresarname
, pero preferiría hacerlo con,fs.parse
aunque es un poco más detallado: stackoverflow.com/a/59576950/895245Si tiene que procesar una variable que contiene la ruta completa (ej .:)
thePath = "http://stackoverflow.com/directory/subdirectory/filename.jpg"
y desea devolver solo "nombre de archivo", puede usar:el resultado será theName == "filename" ;
Para probarlo escriba el siguiente comando en la ventana de la consola de su depurador de Chrome
window.location.pathname.split("/").slice(-1).join().split(".").shift()
Si tiene que procesar solo el nombre del archivo y su extensión (ej .:)
theNameWithExt = "filename.jpg"
:el resultado será theName == "filename" , el mismo que el anterior;
Notas:
Pero no puedo decir nada sobre la comparación de rendimiento con otras respuestas ni sobre la compatibilidad del navegador o el sistema operativo.
fragmento de trabajo 1: la ruta completa
fragmento de trabajo 2: el nombre del archivo con extensión
fragmento de trabajo 2: el nombre del archivo con doble extensión
fuente
Aunque es bastante tarde, agregaré otro enfoque para obtener el nombre de archivo sin extensión usando JS-
path.replace(path.substr(path.lastIndexOf('.')), '')
fuente
path.split('.').pop()
para extensiones de archivo de una parteNode.js elimina la extensión del directorio completo de mantenimiento de rutas
https://stackoverflow.com/a/31615711/895245 por ejemplo did
path/hello.html
->hello
, pero si quierespath/hello.html
->path/hello
, puedes usar esto:directorio de salidas también:
https://stackoverflow.com/a/36099196/895245 también logra esto, pero este enfoque me parece un poco más semántico.
Probado en Node.js v10.15.2.
fuente
¡Aquí es donde las expresiones regulares son útiles! El
.replace()
método de Javascript tomará una expresión regular, y puede utilizarlo para lograr lo que desea:fuente
Otro revestimiento: suponemos que nuestro archivo es una imagen jpg >> ex: var yourStr = 'test.jpg';
fuente
Puedes usar
path
para maniobrar.Salida
fuente
fuente
Este es el código que uso para eliminar la extensión de un nombre de archivo, sin usar regex o indexOf (indexOf no es compatible con IE8). Se supone que la extensión es cualquier texto después del último '.' personaje.
Funciona para:
Aquí está el código:
fuente
hello.tar.gz
, la salida eshellotar
.Usaría algo como x.substring (0, x.lastIndexOf ('.')). Si va por el rendimiento, no use javascript en absoluto :-p No, una declaración más realmente no importa para el 99.99999% de todos los propósitos.
fuente