1

目标

将从 Telligent(一个外联网平台)提取的 HTML 转换为纯文本并发送到 Slack

设置

发生事件时会触发 Telligent Webhook。Azure 逻辑应用接收事件 JSON。JSON 值采用 HTML 格式。Azure 逻辑应用管道内的 JavaScript Azure 函数将 JSON 值转换为纯文本。管道的最后一步在 Slack 中发布纯文本。

Azure 函数的传入代码示例

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

变换方法

这是 Azure Function 中的基本代码。我省略了似乎与这个问题无关的部分,但如果有必要,我可以提供整个脚本。

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 函数中抛出 a。

不成功的替换方法

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

将这些替换方法放在自己的位置var也会引发相同的错误。例如:

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

代码似乎是正确的,因为当我用类似的&quot;东西替换时abc,替换是成功的。

谢谢

请原谅我的 JavaScript,因为我不是程序员,并且正在寻求简化我的工作流程。但是,我很感谢有关代码或我的整个方法的任何建议。

4

1 回答 1

2

通常,您不想尝试使用正则表达式或字符串替换来解析 HTML。有太多事情可能出错。 请参阅这个现在著名的 StackOverflow 答案。 (它甚至被做成了一件T恤。)

相反,您应该使用专门为此目的构建的技术。如果您使用的是 Web 浏览器,则可以使用此问题的答案中描述的技术。但在 Azure Functions 中,您的 JavaScript 不是在浏览器中运行,而是在 Node JS 环境中运行。因此,您需要使用Cheeriohtmlparser2(以及其他)等库。

这是使用 Cheerio 的示例:

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

另外,关于这部分:

...因为我不是程序员...

是的,你是。你现在显然正在编程。任何写代码的人都是程序员。没有俱乐部或秘密握手。我们都是这样开始的。好好提问,祝你旅途愉快!

于 2018-12-10T03:23:26.227 回答