Foros del Web » Programando para Internet » Javascript »

Pregunta sobre expresiones regulares...

Estas en el tema de Pregunta sobre expresiones regulares... en el foro de Javascript en Foros del Web. Buenas chicos, tengo una duda. A veces, si tenía que reemplazar ciertas cadenas en un string o lo que fuera, siempre lo hacía mediante expresiones ...
  #1 (permalink)  
Antiguo 19/09/2006, 04:02
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 3 meses
Puntos: 0
Pregunta sobre expresiones regulares...

Buenas chicos, tengo una duda.

A veces, si tenía que reemplazar ciertas cadenas en un string o lo que fuera, siempre lo hacía mediante expresiones regulares de tal forma:

Código PHP:
cadena.replace(/algo/g,'otra cosa'
Me ha surgido el tema de que tengo que reemplazar los * de un textarea por otro símbolo, esto como se haría? Lo he intentado de varias formas, pero siempre me coge el * como parte de la expresión regular y no como parte de la cadena que quiero reemplazar.

Gracias, 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 19/09/2006, 06:02
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
probaste con esto?:
document.formulario.textarea.value.split('*').join ('loquesea');
  #3 (permalink)  
Antiguo 19/09/2006, 06:17
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Has probado a escapar el asterisco?

cadena.replace(/\*/g,'otra cosa')
  #4 (permalink)  
Antiguo 19/09/2006, 06:53
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 3 meses
Puntos: 0
Haber, os voy a explicar un poco más lo que quiero hacer, tengo un DIV con una parrafada de texto, el cual quiero colorear ciertas palabras, según cuales sean.

Funciona correctamente todo, pero hay un color que quiero dar específico que son frases que empiezan con -* entonces tendría que colorear toda la línea desde donde empieza el -*

Para ello tengo:

Código PHP:
codVerde   = new Array("-*");
 
 for(
i=0i<codVerde.length;i++)
 {
  
expReg "/"+codVerde[i]+"/g";
  
objCod.innerHTML objCod.innerHTML.replace(eval(expReg), '<font color="#669933">'+codVerde[i]+'</font>');
 } 
Como ha dicho tunait, probé también con el escapador, pero tampoco lo coge, alguna sugerencia?

Saludines :)
__________________

: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:
  #5 (permalink)  
Antiguo 19/09/2006, 23:28
 
Fecha de Ingreso: diciembre-2003
Mensajes: 1.583
Antigüedad: 20 años, 4 meses
Puntos: 13
Tunait le estuvo apuntando medio a medio, ya que efectivamente lo que debes hacer es "escapar" el caracter *. Veamos:

En primer lugar lo que necesitas es que la expresión regular obtenga este valor:

expReg = "/-\*/g";

Si dentro del array escapas el *, la expresión regular tomaría el siguiente valor:

expReg = "/-*/g";

Entonces lo que nos falta es escapar el backslash dentro del array. Por lo tanto tendrás que hacer esto:

codVerde = new Array("-\\*");

Así de simple, de esa manera el backslash también aparecerá dentro de la expresión regular.
  #6 (permalink)  
Antiguo 20/09/2006, 01:01
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 3 meses
Puntos: 0
frijolerou gracias por esa aportación, has dado justo en el clavo, con un doble escape funciona correctamente... es que nunca he sido de expresiones regulares y llevo un tiempo haciendo cosas con ellas pero aún no me he acostumbrado totalmente :P

Ya que estoy, te voy ha hacer un par de preguntas más si me lo permites:

- Con esto se me pone coloreado siempre que te detecte -*

Código PHP:
objCod.innerHTML objCod.innerHTML.replace(/-*/g'<font color="#669933">-*</font>'); 
Se puede modificar eso de tal forma para que te cambie -* y todo el resto de la linea hasta que ser detecte un <br> o un \n ?

- Otra cosa más sencillita, pero me he dejado el pdf de ayuda de Javascript en casa :P si busco la palabra "casa" y para ello pongo la expresión regular /casa/g me buscaría todas las coincidencias de "casa" donde yo busco, pero no como palabra independiente, sino que aparte de eso, me devolvería como acierto algo que tenga "casamiento" o "carcasa" y cosas así, como se puede modificar para que solamente buscque la palabra completa "casa" por ejemplo?

Muchas gracias, y un saludo chicos :)
__________________

: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:
  #7 (permalink)  
Antiguo 20/09/2006, 14:03
 
Fecha de Ingreso: diciembre-2003
Mensajes: 1.583
Antigüedad: 20 años, 4 meses
Puntos: 13
crcbad:

Encontré un error en la solución que comenté, pero basta con hacer un par de cambios.

si escapamos dos veces el * dentro del Array, la siguiente línea incluiría uno de los backslashes:

Código:
'<font color="#669933">'+codVerde[i]+'</font>'
Lo que ha que hacer es un pequeño cambio en la expresión regular. Es decir, debemos armar grupos con los caracteres que quieres detectar. Entonces tu script debiera quedar así:

Código:
codVerde   = new Array("-\\*");
 
 for(i=0; i<codVerde.length;i++)
 {
  // el paréntesis se utliza para armar un grupo
  expReg = "/("+codVerde[i]+")/g";
  // $1 hace referencia al grupo generado en la expresión regular. como
// como generamos 1 solo grupo, nos referimos a él como $1
  objCod.innerHTML = objCod.innerHTML.replace(eval(expReg), '<font color="#669933">$1</font>');
 }
Cita:
e puede modificar eso de tal forma para que te cambie -* y todo el resto de la linea hasta que ser detecte un <br> o un \n ?
No hay problema, veamos. En el código anterior, la expresión regular estaba compuesta por un grupo (que contenía la subcadena -*). Ahora debemos armar 3 grupos:

1.- El primer grupo ($1) debe contener la subcadena inicial (-*)
2.- El tercer grupo ($3) debe contener la subcadena final (<br>).
3.- El segundo grupo ($2) debe contener todo el contenido que se encuentra entre el grupo 1 y el grupo 3.

La expresión regular quedaría así:

Código:
expReg = "/("+codVerde[i]+")([^<br>]*)(<br>)/g";
El primer grupo define la subcadena inicial, es decir -*
El tercer grupo define que la cadena debe finalizar en <br> (sorry, no me acuerdo como se hacía para incluir el salto de línea \n)
El segundo grupo define que el contenido intermedio entre el grupo y el grupo 3 debe contener cualquier caracter, excepto <br>.

Entonces la función replace quedaría así:

Código:
objCod.innerHTML = objCod.innerHTML.replace(eval(expReg), '<font color="#669933">$1$2$3</font>');
  #8 (permalink)  
Antiguo 21/09/2006, 01:50
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 3 meses
Puntos: 0
Para cortar un poco el código y hacerlo más visible lo he dejado en esto:

Código PHP:
 expReg "/(-\*)([^<br>]*)(<br>)/g";
 
objCod.innerHTML objCod.innerHTML.replace(expReg'<font color="#669933">$1$2$3</font>'); 
Lo he probado pero no funciona, no colorea ni el principio ni el final ni el medio, pero tampoco da errores, asíq ue la expresión estará correcta pero la funcionalidad no parece funcionar.

Con tus explicaciones me estoy enterando de más cosillas de las expresiones regulares, lo que no entendia de los grupos en un libro y me ha quedado claro con tu descripción perfectamente :D

Voy a seguir revisando que puede estar pasando para que no funcione, si encuentras el por qué no dudes en escribirlo :)

Asias
__________________

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

Última edición por crcbad; 21/09/2006 a las 02:05
  #9 (permalink)  
Antiguo 21/09/2006, 04:41
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 3 meses
Puntos: 0
He conseguido que me funciona mediante la siguiente expresión:

Código PHP:
var expReg = /(-*.*?<br>)/ig;
objCod.innerHTML objCod.innerHTML.replace(expReg'<font color="#669933">$1</font>'); 
Gracias frijolerou por las ideas y ayuda prestada :D
__________________

: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 00:29.