Foros del Web » Programando para Internet » Javascript »

Duda sobre expresiones regulares

Estas en el tema de Duda sobre expresiones regulares en el foro de Javascript en Foros del Web. Buenas, tengo una dudilla. Sé muy poquito sobre expresiones regulares, y lo poco que sé lo uso para hacer búsqueda por patrones de cadenas y ...
  #1 (permalink)  
Antiguo 05/02/2007, 09:44
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 4 meses
Puntos: 0
Duda sobre expresiones regulares

Buenas, tengo una dudilla.

Sé muy poquito sobre expresiones regulares, y lo poco que sé lo uso para hacer búsqueda por patrones de cadenas y poco más.

Ahora, me gustaría saber como poder buscar en una serie de celdas, aquellos valores que sea mayores o iguales a un número mediante expresion regular, pero no he encontrado mucha información o no he buscado bien :P

Alguién me puede echar un cable=?

Un saludo.
__________________

:cool: [ http://eruben.sytes.net ] :cool:


Las dos frases que te ayudarán a salir adelante:
  • No hay mujer fea, solo copas de menos. :borracho:
  • Ante la duda, siempre coge la más tetuda. :arriba:
  #2 (permalink)  
Antiguo 05/02/2007, 11:44
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: Duda sobre expresiones regulares

Las expresiones regulares buscan por caracteres, en un string. No tienen función para detectar si un número es mayor a otro. Para eso tendrás que extraer el número en cuestión de la cadena en la que está contenida (aquí si que puedes utilizar expresiones regulares) para después compararlo mediante un if de toda la vida.

Lo que sí puedes hacer es para números mayores de 99 detectar por ejemplo que tengan mas de dos cifras, o algo por el estilo. Pero no podrás saber si es un número mayor que 56, a no ser que trates el 57 58 59 y todos los números que empiecen por 6,7,8,9, y además todos los que tienen más de dos cifras. No sé si me explico.

Hay una manera de escribir condiciones tal y como hacemos los if y elses dentro de las expresiones regulares, de ese modo sí que podrías identificar el 5 y hacer algo así como: Si es de dos cifras: Si hay un 5 mirar la siguiente cifra->encajar si esa cifra es 6,7,8,9. Pero javascript no soporta esa sintaxis de condicionales.

Por ejemplo, esta expresión regular:
Código:
//sólo menores que 56   
var regExp=/^(([0-4]?[0-9])|(5[0-5]))$/;
Te va a encontrar sólo los números menores que 56 (vale desde el 0 al 55, negativos no).
Lo que busca primero son los numeros naturales del 0 al 49 (la primera cifra es opcional) o, si no incide, que la cadena empiece por 5 y acabe con [1-5].

Sólo de esta manera podrás encajar números mayores o menores que otro número, espero haberme explicado.

Si tuvieras un rango de números (mayor que 13 pero menor que 46) lo que yo haría simplemente es una expresión para mayores que 13 y otra para menores de 46 y pondría un if( regExp1.test(num) && regExp2.test(num) ) para andarme con simplificaciones. Si tuvieras que escribir ese jolgorio en una sola expresión regular se alargaría demasiado con los ((opcion1)|(opcion2)|(opcion3)|...(opcionN)).


Espero que lo entiendas, si tienes dudas planteamelas aquí he intentaré resolvertelas.

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.

Última edición por derkenuke; 05/02/2007 a las 13:33 Razón: un error mio
  #3 (permalink)  
Antiguo 05/02/2007, 12: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: Duda sobre expresiones regulares

Bueno, se me ha ocurrido mirar a ver el rendimiento de esa expresión regular (sólo por curiosidad).

Código:
 
//sólo menores que 56   
var regExp=/^(([0-4]?[0-9])|(5[0-5]))$/;

//genera un numero aleatorio entre min y max
function numAzar(min,max) {	return Math.round(Math.random()*(max-min))+min; }

//el array de los numeros
var arr=new Array();
for(var a=0;a<50000;a++) {
	arr[a]=numAzar(0,56*2);
}

// PRUEBA1 -- transformando los numeros a string y evaluandolos con la expresion regular
var inicio=new Date();
for(var a=0;a<arr.length;a++) {
	regExp.test( arr[a].toString() );
}
var final=new Date();
document.write("PRUEBA1 (transformación toString ): "+(final.getTime()-inicio.getTime())+" milisengundos.<br/>");
// PRUEBA2 -- mirar con un condicional si son menores que 56
var inicio=new Date();
for(var a=0;a<arr.length;a++) {
	if( arr[a]<56 );
}
var final=new Date();
document.write("PRUEBA2 (evaluación numerica): "+(final.getTime()-inicio.getTime())+" milisengundos.<br/>");

//los paso todos a string para hacer la prueba inversa
for(var a=0;a<50000;a++) {
	arr[a]=arr[a].toString();
}
// PRUEBA3 -- evaluandolos con la expresion regular
var inicio=new Date();
for(var a=0;a<arr.length;a++) {
	regExp.test( arr[a] );
}
var final=new Date();
document.write("PRUEBA3 (evaluación de string): "+(final.getTime()-inicio.getTime())+" milisengundos.<br/>");
// PRUEBA4 -- mirar con un condicional si son menores que 56 despues de transformarlos a entero
var inicio=new Date();
for(var a=0;a<arr.length;a++) {
	if( parseInt(arr[a])<56 );
}
var final=new Date();
document.write("PRUEBA4 (transformación parseInt): "+(final.getTime()-inicio.getTime())+" milisengundos.<br/>");
Y los resultados de una ejecución cualquiera son:
PRUEBA1 (transformación toString ): 1893 milisengundos.
PRUEBA2 (evaluación numerica): 230 milisengundos.
PRUEBA3 (evaluación de string): 911 milisengundos.
PRUEBA4 (transformación parseInt): 321 milisengundos.
Con lo que se deduce, que quieras hacerlo como quieras hacerlo, va a rendir bastante más si sacas el número mediante parseInt (bueno, supongo que dependerá si es sencillo o complicadísimo de extraer) y lo evalúas que haciéndolo mediante expresiones regulares.


Sólo por curiosidad...
__________________
- 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; 05/02/2007 a las 13:34 Razón: un error mio
  #4 (permalink)  
Antiguo 06/02/2007, 02:12
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: Duda sobre expresiones regulares

Derkenuke, muy buena explicación, me ha servido de mucho para aclarar todas mis lagunas en este mundillo de las expresiones regulares... lo haré como comentastes.

Muchas gracias de nuevo, y un saludo :)
__________________

:cool: [ http://eruben.sytes.net ] :cool:


Las dos frases que te ayudarán a salir adelante:
  • No hay mujer fea, solo copas de menos. :borracho:
  • Ante la duda, siempre coge la más tetuda. :arriba:
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 21:45.