Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Función JavaScript que cambie el texto

18 de febrero de 2015

Hola, tengo el siguiente problema:

Según un texto, tengo que cambiarlo de esta manera:

  • <upcase>text</upcase> en mayúsculas.
  • <lowcase>text</lowcase> en minúsculas.
  • <mixcase>text</mixcase>, cambiar aleatoriamente entre mayúsculas y minúsculas.

Texto original:

We are <mixcase>living</mixcase> in a <upcase>yellow
submarine</upcase>. We <mixcase>don't</mixcase> have
<lowcase>anything</lowcase> else.

Resultado:

We are LiVinG in a YELLOW SUBMARINE. We dOn'T have.

Tengo que hacerlo como función.

¿Podrían darme ayuda para este código? No son muchas líneas.


Respuestas

#1

En vez de pegarte aquí la solución a este problema, prefiero ayudarte a que seas tú mismo el que lo resuelvas. En mi opinión, la forma más sencilla de resolver este problema consiste en usar la función replace() de JavaScript:

var texto = "Hola Mundo";
var resultado = texto.replace('Hola', 'Adiós');
// resultado = 'Adiós Mundo'

En este caso, como el texto a sustituir es variable, tendrás que usas expresiones regulares:

var texto = "Hola <upcase>Mundo</upcase>";
var resultado = texto.replace(/<upcase>Mundo<\/upcase>/g, 'MUNDO');
// resultado = 'Hola MUNDO'

Cuidado porque como lo que quieres reemplazar usa la barra invertida \ en la etiqueta de cierre, tendrás que escaparla: </upcase> debe escribirse como <\/upcase> dentro de la expresión regular. Por otra parte, la letra g indica que el reemplazo debe hacerse tantas veces como aparezca, no solamente la primera vez.

Generalizando el ejemplo anterior, la siguiente expresión regular sirve para reemplazar cualquier texto:

var texto = "Hola <upcase>Mundo</upcase>";
var resultado = texto.replace(/<upcase>(.*)<\/upcase>/g, '$1');
// resultado = 'Hola MUNDO'

Y la última pieza que te faltaría para resolver este problema es la posibilidad de pasar una función como segundo argumento de la función replace(). Esto lo necesitarás para el caso en el que tienes que mostrar el texto con mayúsculas y minúsculas aleatoriamente:

function convertirEnMayusculas(texto) {
    return texto.toUpperCase();
}
 
var texto = "Hola <upcase>Mundo</upcase>";
var resultado = texto.replace(/<upcase>(.*)<\/upcase>/g, convertirEnMayusculas);
// resultado = 'Hola MUNDO'

@javiereguiluz

18 febrero 2015, 22:07