Foros del Web » Programando para Internet » Javascript »

Expresiones Regulares encuentra de una punta a la otra

Estas en el tema de Expresiones Regulares encuentra de una punta a la otra en el foro de Javascript en Foros del Web. Gente: tengo esto: Código HTML: <script> var texto = ' <a href= "[url e.php?p=-5]" > anterior </a> | <a href= "[url e.php?p=1]" > siguiente </a> ...
  #1 (permalink)  
Antiguo 06/02/2008, 09:34
 
Fecha de Ingreso: julio-2002
Ubicación: Capital Federal
Mensajes: 66
Antigüedad: 22 años, 6 meses
Puntos: 0
Expresiones Regulares encuentra de una punta a la otra

Gente:

tengo esto:
Código HTML:
<script>

var texto = '<a href="[url e.php?p=-5]">anterior</a> | <a href="[url e.php?p=1]">siguiente</a>';

var encuentra = /\[(.*)\]/g;

while (trajo = encuentra.exec(texto)){
     alert(trajo);
}
</script> 
en vez de traerme

[url e.php?p=-5]
[url e.php?p=1]

me trae

[url e.php?p=-5]">anterior</a> | <a href="[url e.php?p=1]

como puedo hacer para que me traiga el primer corchete cerrado que encuentra y no el ultimo?

Comocen algun tutorial copado de expresiones regulares?



Gracias!!!
__________________
Adrián (@ RHCP I Wanna Be Funky Flea)
  #2 (permalink)  
Antiguo 06/02/2008, 11:01
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 7 meses
Puntos: 834
Re: Expresiones Regulares encuentra de una punta a la otra

Probá sacándole el modificador g (es el que hace que las búsquedas sean globales)
  #3 (permalink)  
Antiguo 06/02/2008, 11:47
 
Fecha de Ingreso: julio-2002
Ubicación: Capital Federal
Mensajes: 66
Antigüedad: 22 años, 6 meses
Puntos: 0
Re: Expresiones Regulares encuentra de una punta a la otra

noooo si saco la g es bucle interminable

igual, ya lo resolvi.

Para los que llegan a tener el mismo problema la expresion es:

/\[([ \/%0-9a-zA-Z.=?&-]+)\]/g
__________________
Adrián (@ RHCP I Wanna Be Funky Flea)
  #4 (permalink)  
Antiguo 07/02/2008, 05:41
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 2 meses
Puntos: 45
Re: Expresiones Regulares encuentra de una punta a la otra

Hola Flea:

Eso ocurre porque el asterisco * es por defecto egoísta. A mi también me entro la duda en principio. Es decir, si buscamos de a a a en este texto pasa lo siguiente:
Cita:
Hola que tal, aqui esta mi texto y tiene muchas aes para hallar
Código:
/a.*a/g
Lo que ocurre es lo inesperado, que se captura el rango mayor que se puede capturar, osea:
a que tal, aqui esta mi texto y tiene muchas aes para halla

Para solucionar el problemita del asterisco egoísta, le ponemos un ? detrás para que no abuse:
Código:
/a.*?a/g
Y se encuentra lo que esperábamos:
a que ta
aqui esta
as a
ara
alla




Luego tu problema se resuelve con la expresión regular:
Código:
/\[(.*?)\]/g

Simple y llanamente.
También podíamos haber seguido tu ejemplo de agrupar todos los caracteres posibles, pero hay otra manera más cómoda: dar por válido cualquier caracter dentro de los corchetes, menos el corchete de cierre:
Código:
/\[([^\]]*)\]/g
Es un poco lío la expresión, pero con los paréntesis se hace más legible.


Creo que esta solución la leí por primera vez aquí: http://www.regular-expressions.info/repeat.html#greedy
Ellos lo llaman Greediness y Laziness.

Aunque esa web tiene bastante contenido interesante, mucho no está disponible para javascript (condicionales y alguna cosa más), además es muy general, hablan de PERL y otros lenguajes. Suelo visitar ésta si me entran las dudas:
http://developer.mozilla.org/es/docs...res_especiales


Saludos y espero que te sirva
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 19:38.