La siguiente expresión regularJavascript expresiones regulares de extensión coincidente/archivo de extracción
var patt1=/[0-9a-z]+$/i;
extrae la extensión de archivo de cadenas como
filename-jpg
filename#gif
filename.png
cómo modificar esta expresión regular para devolver sólo una extensión cuando en realidad cuerdas es un nombre de archivo con un punto como separador? (Obviamente el nombre de archivo # gif no es un nombre de archivo regular)
actualización basada en los comentarios de tvanofsson me gustaría aclarar que cuando la función JS recibe la cadena, la cadena ya contendrá un nombre de archivo sin espacios y sin los puntos y otros especiales caracteres (en realidad se manejará un slug
). El problema no estaba en el análisis de nombres de archivo sino en el análisis incorrecto de slugs: la función devolvía una extensión de "jpg" cuando se le daba "filename-jpg" cuando realmente debería devolver null
o una cadena vacía y es este comportamiento el que necesitaba ser corregido
¿La expresión regular debe determinar si el nombre del archivo es un nombre de archivo legal? ¿Qué define un nombre de archivo legal? ¿Qué define una extensión de nombre de archivo legal? Por ejemplo, es 'foo bar.zi_' un nombre de archivo legal? ¿Qué tal 'foo.bar.zi_'? – tvanfosson
El nombre de archivo del sistema operativo típico ... su ejemplo con espacio no puede suceder en nuestro sistema y la respuesta proporcionada por @stema parece funcionar con extensiones dobles, por lo que es lo suficientemente bueno para mí. – mare
Ambos ejemplos son nombres de archivos legales en Unix y Windows. Su pregunta podría mejorarse detallando exactamente lo que considera que es un nombre de archivo legal. Hará las respuestas, esp. la respuesta aceptada es más significativa para los lectores futuros que puedan estar buscando resolver el mismo problema o uno similar. – tvanfosson