Ver Mensaje Individual
  #2 (permalink)  
Antiguo 19/02/2007, 12:53
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 7 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.