Foros del Web » Programando para Internet » Javascript »

expresiones regulares avanzado

Estas en el tema de expresiones regulares avanzado en el foro de Javascript en Foros del Web. Encontre una pagina por ahi buscando informacion de expresiones regulares: http://www.regular-expressions.info Espero que a alguien le sirva, porque a mi, lo que es enseñarme poco, ...
  #1 (permalink)  
Antiguo 10/03/2004, 14:27
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
expresiones regulares avanzado

Encontre una pagina por ahi buscando informacion de expresiones regulares:
http://www.regular-expressions.info
Espero que a alguien le sirva, porque a mi, lo que es enseñarme poco, entre que el tema es dificil y el ingles... Por eso quiero que me expliquen un par de cosas:

Cómo negar un caracter. Es decir, en la pagina lo explican, pero no entiendo la logica de los signos (?,!,=,^). Cómo hacer para que una expresion regular localice todas las p seguidas de cualquier caracter que no sea u, pero que solo haga match la p, no la p_ (p seguida de caracter).

Tambien me interesa que haga match la p_ y tambien que aga match solo el _, no se si esto se puede hacer.


Si no es mucho pedir y no es muy complicado queria comprender las condicionales, porque de lo que he leido



Una ayuda generosa, un link, una explicacion o algo por favor :S

__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.

Última edición por derkenuke; 10/03/2004 a las 15:04
  #2 (permalink)  
Antiguo 21/03/2004, 08:13
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Jej, la verdad es que no hay mucha gente que controle esas cosas de expresiones regulares, ¿me equivoco?
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 31/01/2007, 09:55
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: expresiones regulares avanzado

Bueno, rebuscando he encontrado este mensaje para el que ya encontré respuesta en su día:

Negar un carácter [^a]. Negar un conjunto de caracteres [^aeiou] (negamos vocales = consonantes).

Negative lookahead: q(?!u) --> todas las q no seguidas por una u
Positive lookahead: q(?=u) --> todas las q seguidas de una u
Incluso se puede hacer (?=(regex)), metiendo una regex entre paréntesis

Negative lookbehind: (?<!u)q --> todas las q no precedidas por una u
Positive lookbehind: (?<=u)q --> todas las q precedidas por u

Pero todas las lookbehind me dan error en sintaxis de expresion regular y es porqué javascript no las soporta


Voy a plantear unos ejemplos:
Tengo la palabra murcielago (así, sin tildes para simplificar). Quiero coger todas las consonantes seguidas de vocal:
[^aeiou][aeiou] lo conseguiría --> mu,ci,la,go
Ahora quiero coger sólo la consonante seguida de vocal, sin guardar la vocal:
[^aeiou](?=[aeiou]) --> m,c,l,g


Un apunte para buscar hacia delante. Si tenemos farola y fabola y queremos fichar todas las fa seguidas, por ejemplo, de una consonante y después una o, no podemos hacer:
fa(?=[^aeiou])o
Para entender esto hace falta saber cómo trabaja el motor de regex. Esto es porque la expresión regular empieza buscando fa, y encuentra en las dos fa. Después corrobora que está seguida de una consonante, y VE (no encuentra) una r o una b, según el caso. Seguidamente, después de fa, busca una o inexistente en nuestra cadena. Luego no encuentra en ninguno de los dos casos.

Nuestra expresión regular resulta imposible, ya que mira si despues de fa hay una consonante, y después si fa está seguida de una o, que no es consonante.

Viene a ser el equivalente de escribir if(false), que nunca se va a cumplir.

Para que funcione y encuentre fa+consonante+o tenemos que hacer algo asi:
fa(?=[^aeiou])[^aeiou]o
añadiendo después del lookahead lo que estabamos mirando, para buscarlo. La verdad es que me parece un poco estúpido, porqué viene a ser lo mismo que
fa[^aeiou]o
a secas, por lo menos eso pienso. Si alguien me lo puede verificar...


Y las condicionales if then else de las expresiones regulares tampoco son aceptadas, dan error en sintaxis.




.. y eso es todo lo que sé hasta el momento...
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #4 (permalink)  
Antiguo 31/01/2007, 10:53
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 17 años, 4 meses
Puntos: 3
Re: expresiones regulares avanzado

editado........................................... .......................

Última edición por wigglyUtrera; 20/02/2007 a las 17:41
  #5 (permalink)  
Antiguo 31/01/2007, 18:45
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: expresiones regulares avanzado

¿Perdón? Ya he puesto algún ejemplo de cómo trabajar con los lookahead y las negaciones... ¿a qué te refieres?
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #6 (permalink)  
Antiguo 06/02/2007, 14:02
Avatar de ranceis  
Fecha de Ingreso: septiembre-2006
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: expresiones regulares avanzado



espero y me puedan ayudar, mi duda es la siguiente.
como valido en php que me acepte que empiece con una cadena y termine en cadena y me acepte letras acentuadas y la letra ñ.
pero si el usuario pone una cadena espacio cadena igual lo acepte. ejemplo

1-juan valido
2-juan alberto valido
3-juan alberto invalido, por tener más de un espacio
4- juan alberto invalido por empezar con espacio
5-juan* invalido por tener simbolo luego de caracter
etc jeje, espero y me puedan ayudar ando atorado en esto
  #7 (permalink)  
Antiguo 06/02/2007, 16:50
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: expresiones regulares avanzado

Bueno.. para empezar:
  1. Abre un nuevo post para preguntar una duda que nada tiene que ver con lo que se comenta
  2. Si tu duda es de PHP como comentas, pues hay un foro específico de ello. Pásate por allí.
  3. Intenta redactar tus mensajes de manera que sean legibles/entendibles por el resto. Utiliza las tíldes y signos de puntuación, que para algo fueron inventados.

Espero no haber sido demasiado rígido había que decirlo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #8 (permalink)  
Antiguo 20/02/2007, 16:21
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: expresiones regulares avanzado

Acabo de encontrar por casualidad las restricciones de javascript en cuanto a expresiones regulares se refiere:

Cita:
Iniciado por http://safari.oreilly.com/0596529376/I__CHP_9
* Decent Unicode support. Though Unicode characters can be matched and inserted, the \w word-character wildcard doesn't match anything outside the standard ASCII range. The same holds for the character classes [A-Z] and [a-z], so it is cumbersome to test whether or not a character is a letter or whether it's an upper or lower case. A real pain.
* Lookbehind, neither positive nor negative lookbehind. Very unfortunate.
* If–then constructs. Some script languages permit conditional statements; JavaScript does not. Would be useful.
* Named captures. Not a really great loss.
* Embedded comments. Not a big loss either.
Así que nos quedamos con lo importante: no lookbehind y no condicionales
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #9 (permalink)  
Antiguo 20/02/2007, 17:28
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 17 años, 4 meses
Puntos: 3
Re: expresiones regulares avanzado

Una aclaracion a una cosa que pusiste en un post:

[^aeiou] (negamos vocales = consonantes)

Eso no es del todo cierto, ya que serian todos los simbolos excepto las vocales.

. - {a,e,i,o,u,} , siendo . el conjunto de todos los simbolos

Saludos.
  #10 (permalink)  
Antiguo 20/02/2007, 17:47
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: expresiones regulares avanzado

Cierto, sí, y además de los números; pero me pareció más didáctico así
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #11 (permalink)  
Antiguo 22/02/2007, 18:48
Avatar de gabyweb  
Fecha de Ingreso: enero-2002
Ubicación: Lima
Mensajes: 364
Antigüedad: 22 años, 4 meses
Puntos: 0
Re: expresiones regulares avanzado

Cómo haría para validar que un texto sólo me permita ingresar, letras(may/min), números, guión, guión bajo y punto?

Please, espero su ayuda.

Gracias y saludos

__________________
Gaby :adios:
  #12 (permalink)  
Antiguo 23/02/2007, 08:35
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: expresiones regulares avanzado

mmm.. pues.. ¿abriendo un nuevo hilo?
__________________
- 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




La zona horaria es GMT -6. Ahora son las 06:08.