2010-02-16 8 views
8

así que tengo algún tipo de URL internas: por ejemplo "/img/pic/Image1.jpg" o "/pic/Image1.jpg" o simplemente "Image1.jpg", y necesito para que coincida con este "Image1.jpg" en otras palabras, quiero unir la última secuencia de caracteres después de/o si no hay más que una secuencia de caracteres. ¡Gracias de antemano!Coincidir con la última palabra después de/

+0

expresión regular es universal) pero es para javascript regex –

+3

expresiones regulares no son universal, hay varios sabores con diferentes capacidades. Pero esta Perl Regex hará su tarea: '^ (?:. * *) * (. *) $' –

+1

no necesita una expresión regular para esto.use su idioma favorito, divídalo en "/" y luego obtenga el último elemento. Mucho más simple que crear expresiones regulares. – ghostdog74

Respuesta

11

.*/(.*) no funcionará si no hay/s.

([^/]*)$ debería funcionar si hay o no hay.

+0

Pero '[\ s \ S] */(. *)' Would. – Gumbo

2
.*/([^/]*) 

El grupo de captura coincide con la última secuencia después de /.

+0

No coincidirá con 'Image1.jpg' –

1

La siguiente expresión haría el truco:.

/([\w\d._-]*)$ 

O incluso más fácil (pero creo que esto también se ha publicado a continuación antes de mí)

([^/]+)$ 
0

Algo así como */(*.) $ (los detalles dependen de si estamos hablando de Perl, o algún otro dialecto de expresiones regulares)

Primero. * coincide con todo (incluidas las barras). Luego hay una barra inclinada, luego está. * Que coincide con todo, desde esa barra hasta el final (es decir, $).

El * funciona codiciosamente de izquierda a derecha, lo que significa que cuando tiene varias barras diagonales, la primera. * Coincidirá con todas menos la última.

+0

Su expresión regular * requiere * barra oblicua, por lo que' Image1.jpg' no coincidirá con –

1

En Rubí lo tanto se escribe

([^\/]*)$ 

expresiones regulares en Ruby son bastante universal y que puede probar que vivan aquí: http://rubular.com/ Por cierto: tal vez hay otra solución que no implica las expresiones regulares? E.g File.basenam(path) (Ruby nuevamente)

Editar: profjim lo ha publicado antes.

1

Noté que dijiste en tus comentarios que estás usando javascript. En realidad no necesitas una expresión regular para esto y siempre pienso que es bueno tener una alternativa al uso de expresiones regulares.

var str = "/pic/Image1.jpg"; 
str.split("/").pop(); 

// example: 
alert("/pic/Image1.jpg".split("/").pop());  // alerts "Image1.jpg" 
alert("Image2.jpg".split("/").pop());   // alerts "Image2.jpg" 
10

Actualmente no necesita regexp para esto.

s="this/is/a/test" 
s.substr(s.lastIndexOf("/")+1) 
=> test 

y también funciona bien para las cadenas sin ningún / porque entonces lastIndexOf devuelve -1.

s="hest" 
s.substr(s.lastIndexOf("/")+1) 
=> hest 
1

una expresión regular simple que he probado:

\w+(.)\w+$ 

Aquí es un buen sitio puedes probarlo en: http://rubular.com/

Cuestiones relacionadas