Usar la función replaceText con caracteres especiales (ñ, ¿?, ()...)

820 views
Skip to first unread message

Xavier Pacheco Romero

unread,
Sep 14, 2022, 4:51:40 PM9/14/22
to Apps Script en Español
Un saludo a todos, quería saber si alguien me puede ayudad con el uso de la función replaceText, el tema es que quiero buscar un texto en el cuerpo de un documento y reemplazarlo por otro texto.

La plantilla tiene por ejemplo los siguientes "campos" a reemplazar:

Nombres: {{Nombres}}

Apellidos: {{Apellidos}}

Sexo: {{Sexo}}

Edad: {{Edad (años)}}

Entonces la idea es reemplazar cada texto que comienza y termina con las llaves  dobles (Ejemplo: {{Nombres}} ). Para lograr este objetivo utilizo la función replaceText y funciona muy bien en su mayoría a excepción de Edad: {{Edad (años)}}, y esto se debe a  que este "campo" contiene en su nombre los caracteres especiales como la letra ñ y los paréntesis ()  (Cambié el campo de {{Edad (años)}} a {{Edad anios}} y funciona perfecto), también cabe mencionar que otros campos tienen los signos de pregunta ¿?. 

Dicho sea de paso el nombre de este campo {{Edad (años)}}, es resultante de un formulario de google Forms por lo que NO puedo cambiar el nombre del "campo" Edad.

El código que uso para reemplazar es el siguiente:

let archivoNuevo = DocumentApp.openById(idDocumento);
archivoNuevo.getBody().replaceText("{{Edad (años)}}", "42 años");

Agradezco de antemano su pronta ayuda.
Saludos.





Xavier Pacheco Romero

unread,
Sep 16, 2022, 8:53:18 AM9/16/22
to Apps Script en Español

Por si a alguien le sirve, la solución que encontré es esta forma con expresiones regulares: 

const escapeRegex = (str) => str.replace(/[-[\]/{}()*+?.\\^$|#]/g, '\\$&'); 
const searchAndReplaceInGoogleDocs = () => { 
  const searchText = 'Hello (World'; 
  const replaceText = 'Hello World'; 
  const document = DocumentApp.getActiveDocument(); 
  const documentBody = document.getBody(); 
  const searchResult = documentBody.findText(escapeRegex(searchText)); 
  if (searchResult !== null) 
  { 
    const startIndex = searchResult.getStartOffset(); 
    const endIndex = searchResult.getEndOffsetInclusive(); 
    const textElement = searchResult.getElement().asText(); 
    textElement.deleteText(startIndex, endIndex); 
    textElement.insertText(startIndex, replaceText); 
  } 
  document.saveAndClose();
};

Reply all
Reply to author
Forward
0 new messages