Ver Mensaje Individual
  #3 (permalink)  
Antiguo 26/11/2007, 08:59
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 4 meses
Puntos: 45
Re: Expresion Regular para decimales

Hola razpeitia y alvlin:

En realidad si quiere que también se acepte .111 habría que poner
^[0-9]*(\.[0-9]+)?$


x(?=y) es una asercion predictiva (lookahead assertion) que sólo capturará x si está seguido de y, pero no captura y. Javascript soporta también las negativas x(?!y), pero no soporta las lookbehind, ni las positive x(?<=y) ni las negative x(?<!y).

Te pongo un ejemplo de x(?=y):
Código:
var re = /^casa (?=a)[a-z]+$/;
var pruebas = ["casa amparo", "casa alvaro", "casa andres", "casa pepe", "casa paco", "casa rodrigo"];

for(var i in pruebas) {
	document.write( pruebas[i]+" --> "+re.test(pruebas[i]) +"<br/>");
}
Sin embargo, hay que tener en cuenta que cuando ponemos /^casa (?=a)[a-z]+$/, ese [a-z]+ es el culpable de detectar todo lo que está detrás del espacio en blanco, incluida la a del lookahead, ya que como he dicho antes, no se captura.

Otro ejemplo que funcionaría inesperadamente si no supiéramos esto:
Código:
var re = /^casa (?=a)rr/;
var pruebas = ["casa arroz", "casa arra", "casa arrue", "casa arrp", "casa paco", "casa rodrigo"];

for(var i in pruebas) {
	document.write( pruebas[i]+" --> "+re.test(pruebas[i]) +"<br/>");
}
Lo que imprimirá será:
Cita:
casa arroz --> false
casa arra --> false
casa arrue --> false
casa arrp --> false
casa paco --> false
casa rodrigo --> false
Habría que cambiar la expresión regular a
Código:
/^casa (?=a)arr/;
Si quisiéramos que encajara con los 4 primeros elementos del array.

Como ves, normalmente es útil para casos en los que x tiene que ir seguido de y, y no nos importe nada más detrás de y.


Es una pena que los lookbehind no estén soportados por javascript, ya podrían ponerlos en las versiones nuevas, aunque de ello no sé nada.




Espero que hayas sacado algo en claro de este post

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