esta es mi primera pregunta sobre stackoverflow, así que por favor déjenme saber cómo puedo mejorar la legibilidad para otros.
Estoy tratando de usar expresiones regulares en la cadena que obtuve de getPlainBody() en GmailMessage Class pero de alguna manera no funciona cuando trato de hacerlo directamente en la cadena devuelta por getPlainBody() pero funciona bien cuando agrego manualmente \n caracteres.
Código que funciona:
function RegularExp() { //manually entered \n characters into string that I copied and pasted from getPlainBody() var string = "Personal Message\nraw material: oak wood 100kg\nTRACKING NUMBER 7777777777\n<somehyperlink\nFROM SomeBrand"; //my goal is to get: raw material: oak wood 100kg var regExp = new RegExp("(.*?)\n(?=TRACKING NUMBER)","g"); var PersonalMessage = regExp.exec(string)[1]; Logger.log(PersonalMessage); //works perfectly fine }Código que no funciona:
for (var j in messages){ var message = messages[j]; var plainText = message.getPlainBody(); //getting plainbody of fedex mail of interest //trying to extract the personal message var regExp = new RegExp("(.*?)\n(?=TRACKING NUMBER)","g"); var PersonalMessage = regExp.exec(plainText)[1]; Logger.log(PersonalMessage); //won't show anything }Mi pregunta es ¿por qué funciona cuando ingreso manualmente \n pero no cuando uso la cadena que devolvió getPlainBody()? Estoy usando exactamente el mismo patrón de expresiones regulares y no puedo ver por qué.
A continuación se encuentran los enlaces que utilicé para tratar de resolver mi problema (o podría ser un tonto al no poder aplicar la solución a este problema)
Nueva línea en la función getplainbody del script de la aplicación de Gmail
Google Apps Script: getPlainBody() comportamiento extraño
Regex - secuencia de comandos de aplicaciones de Google
Gracias
El tema es que el . no coincide con un carácter CR en la expresión regular de JavaScript (tipo ECMAScript).
Puedes usar
var regExp = /(.*)(?=\r?\nTRACKING NUMBER)/g;Las coincidencias de expresiones regulares
(.*) - Grupo 1: cualquier cero o más caracteres que no sean caracteres de salto de línea (no coincide con los caracteres LF y CR)(?=\r?\nTRACKING NUMBER) : una anticipación positiva que coincide con una ubicación seguida inmediatamente por\r? - un CR opcional (carácter de retorno de carro)\n - un carácter de avance de líneaTRACKING NUMBER : una cadena fija (al final de la siguiente línea).