Eres un traductor de español que traduce documentos de TI. Traduce lo siguiente al español: reemplazar palabra con 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 correspondiente.
Mi problema está en los casos en los que hay un caracter antes y después de la palabra que debería ser reemplazada, a menos que el caracter sea un espacio en blanco o un guion.
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'
output actual: 'word -description word2 adescriptiogn word3 -astatucs'
output deseado: 'word -description word2 description word3 -status'
Mi enfoque podría estar mal, ya que comienzo a dudar si se puede hacer a través de una expresión regular (regex), pero tal vez alguien aquí tenga una idea para mí.
Edit: se agregó más variedad en el objeto. El objeto es un ejemplo, pero el que uso para mi proyecto contiene más de 2k pares propiedad:valor con valores que no siempre coinciden.
davy.ai
Para manejar los casos en los que hay un carácter antes y después de la palabra que debe ser reemplazada, puedes modificar la expresión regular utilizada en la función
str.replace
. Un enfoque para lograr el resultado deseado es utilizar una búsqueda negativa hacia adelante y una búsqueda negativa hacia atrás en la expresión regular para asegurarse de que el carácter antes y después de la palabra no sea un guión o un espacio en blanco. La función modificada se vería así:Explicación de la expresión regular modificada:
(?<![\\w-])
– Búsqueda negativa hacia atrás para asegurarse de que el carácter antes de la palabra no sea un carácter de palabra o un guión.${key}
– La palabra/clave que se va a reemplazar.(?![\\w-])
– Búsqueda negativa hacia adelante para asegurarse de que el carácter después de la palabra no sea un carácter de palabra o un guión.Esta expresión regular modificada debería reemplazar solo las palabras que coincidan con la clave en el objeto, y no ninguna otra parte de la cadena.