Замена & quot; с использованием общих методов не работает в JavaScript-функции Azure
Цель
Преобразуйте HTML, извлеченный из Telligent (платформа экстрасети), в обычный текст и отправьте в Slack
Настроить
Веб-крючок Telligent срабатывает, когда происходит событие. Приложение Azure Logic получает событие JSON. Значение JSON находится в HTML. Функция JavaScript Azure в конвейере приложения логики Azure преобразует значение JSON в простой текст. Последний шаг в конвейере публикует простой текст в Slack.
Пример входящего кода в функцию Azure
"body": "<p>" '</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(/'/g, "'");
var noHtmlEncodeDoubleQuote = noHtmlEncodeSingleQuote.replace(/"/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.
Неудачные методы замены
"\""
'"'
"
"'"'"
"["]"
"(")"
Положив эти методы замены в свои var
также выдает ту же ошибку. Например:
var replace = "\""
...
var noHtmlEncodeDoubleQuote = noHtmlEncodeSingleQuote.replace(/"/g, replace);
Код кажется правильным, потому что, когда я заменяю "
с чем-то вроде abc
, замена прошла успешно.
Спасибо
Пожалуйста, прости мой JavaScript, так как я не программист и пытаюсь упростить процесс для моей работы. Тем не менее, я благодарен за любой совет, касающийся кода или всего моего подхода.
1 ответ
Как правило, вы не хотите пытаться анализировать HTML с помощью регулярных выражений или замены строк. Есть слишком много вещей, которые могут пойти не так. Посмотрите этот теперь известный ответ Stackru. (Это было даже превращено в футболку.)
Вместо этого вы должны использовать технику, специально разработанную для этой цели. Если бы вы были в веб-браузере, вы могли бы использовать методы, описанные в ответах на этот вопрос. Но в функциях Azure ваш JavaScript не запускается в браузере, он работает в среде Node JS. Поэтому вам нужно будет использовать такие библиотеки, как Cheerio или htmlparser2 (и другие).
Вот пример использования Cheerio:
var cheerio = require('cheerio');
var text = cheerio.load(html.body).text();
Также относительно этой части:
... так как я не программист...
Да, вы. Вы явно программируете прямо сейчас. Любой, кто пишет код, является программистом. Здесь нет ни клубного, ни секретного рукопожатия. Мы все начинаем именно так. Хорошая работа, задавая вопросы, и удачи в вашем путешествии!