Foros del Web » Programando para Internet » Javascript »

ayuda sobre busqueda

Estas en el tema de ayuda sobre busqueda en el foro de Javascript en Foros del Web. Mi problema radica en : un buscador dentro de la misma pagia , pero los buscadores convencionales no me resultan de ayuda porque mi busqueda ...
  #1 (permalink)  
Antiguo 18/02/2007, 23:00
 
Fecha de Ingreso: agosto-2006
Ubicación: Cuba
Mensajes: 23
Antigüedad: 17 años, 9 meses
Puntos: 0
ayuda sobre busqueda

Mi problema radica en :
un buscador dentro de la misma pagia , pero los buscadores convencionales no me resultan de ayuda porque mi busqueda radica en lo siguiente que al pasarle
% ar ---- me busque todos las palabras que terminen en ar
cuando le pase
ar% ---- me localize en la misma pagia la palabras que empiesen con ar
y cuando
%ar% ---- me localice todas la palabras que tenga ar en cualquier lugar

y eso mismo para numeros
  #2 (permalink)  
Antiguo 19/02/2007, 12:53
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: ayuda sobre busqueda

Se me ha ocurrido una opción, pero no estoy seguro de su fiabilidad. De momento funciona para %ar, ar% y %ar%, puedes probarlo a ver lo que da de sí. De lo que creo que sí estoy seguro es de que dará problemas con los símbolos de las expresiones regulares, habría que escaparlos todos (el punto, la barra, corchetes, paréntesis...).

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
<meta name="Author" content="derkeNuke">
</head>

<body>


<p id="donde"> artista texto que puedes añadir terminar o arrimar cascar y calamar arañar pero cargar </p>

<input type="text" id="caja" value="ar%" /> <input type="button" onclick="buscar()" value="busca" />


<script>

function buscar() {
	var txt=document.getElementById("caja").value;
	//para construir una expresión regular sustituimos el '%' por cualquier caracter una o más de una vez
	//por cualquier caracter he tomado c para que coja más que \w (\w no coge ni ñ ni tildes ni diéresis)
	var c= "a-zA-Z0-9áéíóúÁÉÍÓÚñÑûÛ";			//cualquier caracter
	//txt=txt.replace(/%/g,"["+c+"]+");
	txt=txt.replace(/^%/g,"( ["+c+"]+)").replace(/%$/g,"(["+c+"]+ )");
	//si txt no comienza con un parentesis es que % no estaba al principio, pero debemos capturar de todas maneras un espacio en blanco que no habríamos puesto
	if( txt.charAt(0)!="(" )
		txt="( )"+txt;
	//lo mismo para el final. si no hubiese parentesis al final significaria no capturar el espacio final
	if( txt.charAt(txt.length-1)!=")" )
		txt+="( )";
	//todo lo que no sea literalmente c encerrado entre parentesis con un espacio opcional a cada lado y con un + detrás lo encerramos en paréntesis para poderlo capturar después si deseáramos
	txt=txt.replace(/([^(["+c+"\]) ]+)/g, "($1)" );
	//en este punto nos hemos asegurado de tener un txt con 3 parentesis con contenido, y el central sera nuestra búsqueda
	var reg=new RegExp( txt , "gi");		//creamos la RegExp
	var encontrado=document.getElementById("donde").innerHTML.match( reg );		//encontramos incidencias

	//incluso podemos marcarlas directamente en el texto
	document.getElementById("donde").innerHTML=document.getElementById("donde").innerHTML.replace(reg, "$1<b>$2</b>$3");
	//(ojo si modificamos el contenido, tendremos que cambiar esta función para adaptarla a etiquetas html entre el texto)
}

</script>

</body>
</html>

Supongo que te servirá, y también supongo que habrá maneras más sencillas de hacerlo, pero no he visto ninguna.

He comentado todo minuciosamente para que se pueda entender mejor, porque es algo complicado con esto de las expresiones regulares y tal.
Si no se entiende algo, que nadie dude en preguntar.



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.
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:10.