Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

145
Vistas
reemplazar la palabra con la coincidencia del objeto en JS

Estoy tratando de reemplazar palabras en una cadena con coincidencias de un objeto. Si una palabra coincide con la propiedad de un objeto, será reemplazada por el valor relevante. Mi problema son los casos en los que hay un carácter antes y después de la palabra que debe reemplazarse, a menos que el carácter sea un espacio en blanco o un guión.

 function fixTypos(str) { var typoObject = { descriptiogn:'description', decscription:'description', vdescription:'description', wdescription:'description', descriptiog:'description', statucs:'status', statuqs:'status', cstatus:'status', for (var key in typoObject) { str = str.replace(new RegExp(`\\b${key}\\b`, "gi"), typoObject[key]); } return str; }

teststring: 'word -decscription word2 adescriptiogn word3 -astatucs'

salida actual: 'word -description word2 adescriptiogn word3 -astatucs'

salida deseada: 'word -description word2 description word3 -status'

Mi enfoque podría ser el incorrecto, ya que empiezo a dudar de que se pueda hacer a través de expresiones regulares, pero tal vez alguien aquí tenga una idea para mí.

Editar: agregó más variedad en el objeto. El objeto es un ejemplo, pero el que uso para mi proyecto contiene más de 2k propiedades: pares de valores con valores que no siempre coinciden

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Podría crear una expresión regular para capturar cualquiera de las palabras clave, utilizando un grupo de captura para identificar cuál era y una función de devolución de llamada para realizar la búsqueda de la traducción:

 const translation = { descriptiogn:'description', decscription:'description', vdescription:'description', wdescription:'description', descriptiog:'description', statucs:'status', statuqs:'status', cstatus:'status', }; const regex = new RegExp("\\b\\w*(" + Object.keys(translation) .sort((a, b) => b.length - a.length) .join("|") + ")\\w*\\b", "g"); const fixTypos = str => str.replace(regex, (_, match) => translation[match]); const teststring= 'word -decscription word2 adescriptiogn word3 -astatucs' console.log(fixTypos(teststring));

Puede ser necesario ordenar las palabras clave de la más larga a la más corta para dar prioridad a las coincidencias más largas cuando también coincidiría una clave más corta.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Simplemente usaría una alternancia aquí. Cree una matriz de términos de variantes de descripción para buscar y luego realice un reemplazo global.

 var input = 'word -decscription word2 adescriptiogn word3 -adescriptiogn'; var terms = ['descriptiogn', 'decscription', 'vdescription', 'wdescription', 'descriptiog']; var regex = new RegExp("\\b\\w*(?:" + terms.join("|") + ")\w*\\b", "g"); var output = input.replace(regex, "description"); console.log(input); console.log(output);

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda