Ver Mensaje Individual
  #4 (permalink)  
Antiguo 07/02/2008, 05:41
Avatar de derkenuke
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.