Замена & quot; с использованием общих методов не работает в JavaScript-функции Azure

Цель

Преобразуйте HTML, извлеченный из Telligent (платформа экстрасети), в обычный текст и отправьте в Slack

Настроить

Веб-крючок Telligent срабатывает, когда происходит событие. Приложение Azure Logic получает событие JSON. Значение JSON находится в HTML. Функция JavaScript Azure в конвейере приложения логики Azure преобразует значение JSON в простой текст. Последний шаг в конвейере публикует простой текст в Slack.

Пример входящего кода в функцию Azure

"body": "<p>&quot; &#39;</p><div style=\"clear:both;\"></div>"

Метод трансформации

Это основной код в функции Azure. Я упустил части, которые кажутся несоответствующими этому вопросу, но могут предоставить весь сценарий, если это необходимо.

module.exports = function (context, data) {
   var html = data.body;

// Change HTML to plain text
   var text = JSON.stringify(html.body);
   var noHtml = text.replace(/<(?:.|\n)*?>/gm, '');
   var noHtmlEncodeSingleQuote = noHtml.replace(/&#39;/g, "'");
   var noHtmlEncodeDoubleQuote = noHtmlEncodeSingleQuote.replace(/&quot;/g, "REPLACEMENT");

// Compile body for Slack
   var readyString = "Slack text: " + noHtmlEncodeDoubleQuote;

// Response of the function to be used later
   context.res = {
     body: readyString
   };

   context.done();
};

Результаты

Единая кавычка успешно заменена и корректно разрешается при публикации в Slack.

Следующие методы замены для двойной кавычки Status: 500 Internal Server Error в рамках функции Azure.

Неудачные методы замены

"\""
'"'
&quot;
"'"'"
"["]"
"(")"

Положив эти методы замены в свои var также выдает ту же ошибку. Например:

var replace = "\""
...
var noHtmlEncodeDoubleQuote = noHtmlEncodeSingleQuote.replace(/&quot;/g, replace);

Код кажется правильным, потому что, когда я заменяю &quot; с чем-то вроде abc, замена прошла успешно.

Спасибо

Пожалуйста, прости мой JavaScript, так как я не программист и пытаюсь упростить процесс для моей работы. Тем не менее, я благодарен за любой совет, касающийся кода или всего моего подхода.

1 ответ

Решение

Как правило, вы не хотите пытаться анализировать HTML с помощью регулярных выражений или замены строк. Есть слишком много вещей, которые могут пойти не так. Посмотрите этот теперь известный ответ Stackru. (Это было даже превращено в футболку.)

Вместо этого вы должны использовать технику, специально разработанную для этой цели. Если бы вы были в веб-браузере, вы могли бы использовать методы, описанные в ответах на этот вопрос. Но в функциях Azure ваш JavaScript не запускается в браузере, он работает в среде Node JS. Поэтому вам нужно будет использовать такие библиотеки, как Cheerio или htmlparser2 (и другие).

Вот пример использования Cheerio:

var cheerio = require('cheerio');
var text = cheerio.load(html.body).text();

Также относительно этой части:

... так как я не программист...

Да, вы. Вы явно программируете прямо сейчас. Любой, кто пишет код, является программистом. Здесь нет ни клубного, ни секретного рукопожатия. Мы все начинаем именно так. Хорошая работа, задавая вопросы, и удачи в вашем путешествии!

Другие вопросы по тегам