es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe una forma mejor de limpiar una cadena de texto?

Actualmente, este es mi código.

function cleanString(rawString) {
    A = "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 1234567890".split("");
    var cleanedString = rawString.toLowerCase();
    for (i = 0; i < cleanedString.length; i++) {
        if (!A.includes(cleanedString[i])) {
            cleanedString = setCharAt(cleanedString, i, " ");
        }
    }
    cleanedString = cleanedString.replace(/\s\s+/g, " ");
    return cleanedString;
}

function setCharAt(str, index, chr) {
    if (index > str.length - 1) return str;
    return str.substring(0, index) + chr + str.substring(index + 1);
}

No conozco las expresiones regulares y probablemente sea más fácil con ellas. Esto es lo que quiero hacer:

Entrada: Hola, David Mundo 123!

Salida: hola david mundo 123

.

Entrada: hELlo., <>;dAVId world .;- 123

Salida: hello david world 123

.

Entrada: He.llo David, w!orld 123#

Salida: he llo david w orld 123

.

Básicamente, lo que quiero hacer es reemplazar todo lo que no sea a-z0-9 con un espacio y luego eliminar los espacios en blanco duplicados. En otras palabras, solo quiero a-z0-9 en mis resultados. ¿Cómo puedo hacer eso?

PD: El código funciona, pero creo que se ve mal y es bastante ineficiente.

EDITAR: Lo siento, me refiero a que solo quiero letras minúsculas en mi salida. Soy tonto.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado usando regex, puedes reemplazar cualquier caracter que no sea una letra minúscula o un número por un espacio utilizando el siguiente código:

    function clean_string(raw_string) {
      return raw_string.toLowerCase().replace(/[^a-z0-9]+/g, " ").trim().replace(/\s\s+/g, " ");
    }
    

    Desglosemos la expresión regular utilizada en el método replace:

    • /[^a-z0-9]+/g coincidirá con cualquier caracter que no sea una letra minúscula o un número.
    • El + significa que queremos coincidir con uno o más de estos caracteres.
    • La g es una bandera que significa que queremos reemplazar todas las ocurrencias, no solo la primera.

    Entonces, básicamente estamos reemplazando cualquier secuencia de caracteres que no sean letras minúsculas o números por un solo espacio.

    Finalmente, usamos .trim() para eliminar cualquier espacio al inicio o al final y .replace(/\s\s+/g, " ") para reemplazar cualquier doble espacio por un solo espacio.

    Esta implementación es más concisa y eficiente que la anterior.

Comments are closed.