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')
Gracias, un saludo ^^
| ||||
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: Gracias, un saludo ^^
__________________
|
| ||||
probaste con esto?: document.formulario.textarea.value.split('*').join ('loquesea');
__________________ Fast, lightweight, cross-platform framework for building incredible, powerful JavaScript applications |
| ||||
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: Saludines :)
__________________
|
| |||
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. |
| ||||
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: - 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 :)
__________________
|
| |||
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:
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í:'<font color="#669933">'+codVerde[i]+'</font>'
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: 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: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 ? 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:
El primer grupo define la subcadena inicial, es decir -*expReg = "/("+codVerde[i]+")([^<br>]*)(<br>)/g"; 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>'); |
| ||||
Para cortar un poco el código y hacerlo más visible lo he dejado en esto: Código PHP: 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
__________________
Última edición por crcbad; 21/09/2006 a las 02:05 |
| ||||
He conseguido que me funciona mediante la siguiente expresión: Código PHP:
__________________
|