Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/08/2009, 22:08
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Expresión regular: <tag>Contenido</tag>, no me funciona :S

te comprendo! yo estuve unos años sin entender el concepto hasta que un dia me canse e investigue. mi interpretacion era parecida a la tuya, pensaba algo como opcionalmente repetir el patron. para poder entenderlo no puedes separar las partes. ponlo de esta forma, el signo ? es una modificacion al repetidor *, de la misma forma que un elemento contiene atributos para modificar ciertas caracteristicas o un comando puede tener argumentos para llevar a cabo tareas mas especificas.

¿como funciona? bien simple! la mejor manera de ilustrarlo es con ejemplo. supongo que tenemos una serie de numeros que puede ser variable, por ejemplo "0123456789876543210". con expresion regulares podemos atraparlo con /\d+/. pero ahora digamos que solo quieres buscar hasta el primer "4" en la cifra. probablemente pienses que la solucion es /\d+4/. te llevaras una sorpresa porque el resultado devuelto es "012345678987654" cuando realmente lo que te interesa es la parte en negrita. como ya se habia explicado antes, sucede que los repetidores (*, +) son codiciosos, ellos intentan capturar todas las alternativas posibles con la expresion dada. la repuesta a este asunto es utilizar el ? para indicarle que solo busque lo necesario. por tanto /\d+?4/ devuelve "01234".

por otro lado, recuerda que el repetidor repite la expresion anterior. en este caso es \d que significa cualquier digito. en este caso particular, la razon por la que la expresion sin el ? recoge todas las alternativas posibles es porque el "4" forma parte de la clase \d. para hacerlo mas ilustrado, las expresiones evaluan de la siguiente forma:

/\d+4/
0123456789876543210

/\d+?4/
0123456789876543210
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.