2011-11-08 24 views
23

Tener este texto:expresión regular para que coincida con el nombre de archivo al final de la URL

http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg 

y otros textos como éste, en el último 1 puede ser cualquier otro número y el último 44 puede ser cualquier otro número, así, necesito una expresión regular que coincidirá con /1t44.jpg. Todo lo que he intentado hasta ahora (/.+?\.([^\.]+)$) coincide con la primera barra inclinada (//img.oo.com.au/prod/CRWWBGFWG/1t44.jpg).

Estoy usando javascript, así que cualquier cosa que funcione en RegexPal debería hacer.

Gracias de antemano.

+0

son Está tratando de hacer coincidir cualquier nombre de archivo al final de una ruta (porque eso es lo que su expresión regular intenta hacer) o un nombre de archivo que sigue el patrón 'XtXX.jpg'? –

+0

@Dmitry: realmente estoy tratando de encontrar la expresión regular que coincida en general con el nombre del archivo al final. – Juan

Respuesta

26

Si desea hacer coincidir un nombre de archivo con un extenstion archivo muy específico, puede usar algo como esto:

/\/\dt\d\d\.jpg$/ 

Esto coincide:

a slash 
followed by a digit 
followed by the letter 't' 
followed by two digits 
followed by '.jpg' at the end of the string 

O, si lo que realmente quieres la nombre de archivo (lo que está después de la última barra con cualquier extensión de archivo), entonces puede usar esto:

/\/[^\/]+$/ 

Th Se partidos

a slash 
followed by one or more non-slash characters 
at the end of the string 

En la cadena de muestra de http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg, ambos coincidirán /1t44.jpg. El primero es obviamente mucho más restrictivo ya que requiere un formato específico del nombre del archivo. El segundo coincide con cualquier nombre de archivo.


Otras opciones. En el desarrollo de node.js, puede usar el path module y usar path.parse() para abrir una ruta en todos sus diversos componentes.

Y, hay varias bibliotecas escritas para el navegador que también dividirán una ruta en sus componentes.

+1

Sí, eso último es lo que realmente quería. El otro funciona pero este último puedo aprender algo de :). – Juan

+0

@RamtinSoltani - Lea el comentario del OP justo antes del suyo y mire la segunda opción que ofrezco y vea que el OP aceptó esta respuesta como lo que ellos querían. ¿Realmente vas a rechazar esto a pesar de que el OP dijo que les proporcioné lo que necesitaban? – jfriend00

+0

@ jfriend00 No es una respuesta para "Regex que coincide con la última aparición de un personaje". –

44

Aquí es una expresión regular simple que coincidirá con todo después de la última /:

/[^/]*$ 
+5

¡yo estaba buscando! : D, pero necesitaba escapar de /,/[^ \ /] * $ –

+0

Esta solución es elegante y de uso general. –

3

Por supuesto que no tiene que utilizar una expresión regular to split a string y pop the last part:

var str="http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg"; 
var parts = str.split("/"); 
document.write(parts.pop() + "<br />"); 
9

Como dice Johnsyweb , un expreso regular no es realmente necesario aquí. AFAIK la forma más rápida de hacerlo es con lastIndexOf y substr.

str.substr(str.lastIndexOf('/')); 
+1

http://programmers.stackexchange.com/questions/223634/what-is-meant-by-now-you-have-two-problems –

0

Esto es para Java en una máquina Linux. Captura la última parte de una ruta de archivo, de modo que pueda usarse para bloquear un archivo.

// String to be scanned to find the pattern. 
String pattern = ".*?([^/.]+)*$"; 

// Create a Pattern object 
Pattern r = Pattern.compile(pattern); 

// Now create matcher object. 
Matcher match = r.matcher("/usr/local/java/bin/keystore"); 

/** 
* Now you have two matches 
* #0 /usr/local/java/bin/keystore 
* #1 keystore 
*/ 

String fileLock = ""; 

if (match.find()) { 
    fileLock = match.group(1) + ".lock"; 
} 

Un poco diferente de la pregunta original, lo sé. Pero espero que esto ayude a otros que estaban atrapados con el mismo problema que yo tuve.

Comparte y disfruta.

0

Sobre la base de la respuesta de Scott, intente lo siguiente: (JavaScript)

var url = "http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg"; 

var path   = url.replace(/(.*)([\\\/][^\\\/]*$)/, "$1"); 

var lastElement = url.replace(/(.*)([\\\/][^\\\/]*$)/, "$2"); 

Esto se puede también coincidir para que la ruta del archivo de Windows/Nix, para extraer el nombre del archivo o la ruta del archivo:

c:\Program Files\test.js => c:\Program Files 

c:\Program Files\test.js => \test.js 
Cuestiones relacionadas