2009-03-25 19 views

Respuesta

1
var x = "1.txt"; 
alert (x.substring(x.indexOf(".")+1)); 

nota 1: esto no va a funcionar si el nombre del archivo es de la forma file.example.txt
Nota 2: este fallará si el nombre del archivo es de la forma archivo

+0

Tengo lo que quiero dar gracias .... – santanu

+1

Usted podría utilizar lastIndexOf, no estoy seguro del soporte del navegador (puede que desee comprobar IE6, pero es fácil prototipo de su propia). .sólo querrá asegurarse de asegurarse de escanear desde antes del último carácter ... para que 'algo'. no coincide, pero 'something.x' sería – meandmycode

+0

sí, mi solución es muy simplista, pero he documentado sus inconvenientes;) – cherouvim

124

utilice el método lastIndexOf para encontrar el último período en la cadena, y obtener la parte de la cadena después de que:

var ext = fileName.substr(fileName.lastIndexOf('.') + 1); 
+0

No funciona con variantes de "archivo" (es decir, sin extensión). –

+14

En realidad, lo hace. Devuelve el nombre completo del archivo, que es tan bueno como cualquier cosa en ese caso IMO. Si desea una cadena vacía en su lugar, tendrá que usar una instrucción if (¡jadeo!). Además, si utiliza node.js con JavaScript, consulte el módulo integrado "ruta". –

-1

que nos e código a continuación:

var fileSplit = filename.split('.'); 
var fileExt = ''; 
if (fileSplit.length > 1) { 
fileExt = fileSplit[fileSplit.length - 1]; 
} 
return fileExt; 
1

Esta es la solución si su archivo tiene más. (puntos) en el nombre.

<script type="text/javascript">var x = "file1.asdf.txt"; 
var y = x.split("."); 
alert(y[(y.length)-1]);</script> 
17

Yo recomiendo usar lastIndexOf() en contraposición a indexOf()

var myString = "this.is.my.file.txt" 
alert(myString.substring(myString.lastIndexOf(".")+1)) 
218

Una variante que funciona con todas las siguientes entradas:

  • "file.name.with.dots.txt"
  • "file.txt"
  • "file"
  • ""
  • null
  • undefined

sería:

var re = /(?:\.([^.]+))?$/; 

var ext = re.exec("file.name.with.dots.txt")[1]; // "txt" 
var ext = re.exec("file.txt")[1];     // "txt" 
var ext = re.exec("file")[1];      // undefined 
var ext = re.exec("")[1];       // undefined 
var ext = re.exec(null)[1];      // undefined 
var ext = re.exec(undefined)[1];     // undefined 

Explicación

 
(?:   # begin non-capturing group 
    \.  # a dot 
    (  # begin capturing group (captures the actual extension) 
    [^.]+ #  anything except a dot, multiple times 
)   # end capturing group 
)?   # end non-capturing group, make it optional 
$   # anchor to the end of the string 
+5

@Tomalak ... ¡esto es genial! ¿Te importaría explicar qué está haciendo cada parte de la regla? – Hristo

+22

@Hristo Ciertamente no. Véase más arriba. – Tomalak

+2

muchas gracias :) – Hristo

101

I pers onalmente prefiere dividir la cadena de . y simplemente devolver el último elemento de la matriz :)

var fileExt = filename.split('.').pop();

Si no hay . en nombre se obtiene toda la cadena de nuevo.

Ejemplos:

'some_value'         => 'some_value' 
'.htaccess'         => 'htaccess' 
'../images/something.cool.jpg'     => 'jpg' 
'http://www.w3schools.com/jsref/jsref_pop.asp' => 'asp' 
'http://stackoverflow.com/questions/680929' => 'com/questions/680929' 
+0

Gracias. Esta es la más clara para mí. Estoy pasando el nombre de archivo a una función , así que tuve que hacer una comprobación nula antes de llamar a split. – Lifes

+0

Regex parece exagerado para esto. Esto es más fácil de pensar/razonar. Uso esta solución para la mayoría de los casos. – aashtonk

0

obtener el valor de la variable & luego se separan de su extensión al igual que este.

var find_file_ext=document.getElementById('filename').value; 
var file_ext=/[^.]+$/.exec(find_file_ext); 

Esto te ayudará.

10

Es mejor utilizar lo siguiente; Funciona siempre!

var ext = fileName.split('.').pop(); 

Esto devolverá la extensión sin un prefijo de punto. Puedes añadir "." + ext para comprobar contra las extensiones que desea apoyar!

+0

Respuesta repetida – insign

-1

Pruebe esto. Puede resolver su problema.

var file_name_string = "file.name.string.png" 

var file_name_array = file_name_string.split("."); 
var file_extension = file_name_array[file_name_array.length - 1]; 

Saludos

+0

Es mejor usar una expresión regular. – itsbruce

+0

@itsbruce utilizando los términos "mejor" y votar abajo es una mierda ... Esto funciona. PD Si la pregunta era "¿Cuál es la mejor manera de obtener la extensión del nombre del archivo?" - Estoy totalmente de acuerdo ... –

+1

No he votado negativamente. – itsbruce

Cuestiones relacionadas