Замена «на» с помощью распространенных методов не работает в JavaScript-функции Azure - PullRequest
0 голосов
/ 10 декабря 2018

Цель

Преобразование 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;
"'"'"
"["]"
"(")"

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

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

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

Спасибо

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

1 Ответ

0 голосов
/ 10 декабря 2018

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...