将从Telligent(外部网平台)提取的HTML转换为纯文本,然后发送给Slack
事件发生时触发智能Webhook。 Azure逻辑应用程序接收事件JSON。 JSON值为HTML。 Azure Logic应用程序管道中的JavaScript Azure函数将JSON值转换为纯文本。管道的最后一步是在Slack中发布纯文本。
"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中发布时可以准确解析。
以下用于双引号的替换方法在Azure函数中引发Status: 500 Internal Server Error
。
"\""
'"'
"
"'"'"
"["]"
"(")"
将这些替换方法放在自己的var
中也会引发相同的错误。例如:
var replace = "\""
...
var noHtmlEncodeDoubleQuote = noHtmlEncodeSingleQuote.replace(/"/g, replace);
代码似乎是正确的,因为当我用"
之类的东西替换abc
时,替换成功。
请原谅我的JavaScript,因为我不是程序员,正在寻求简化工作流程。但是,我非常感谢您提供有关代码或整个方法的建议。
答案 0 :(得分:2)
通常,您不想尝试使用正则表达式或字符串替换来解析HTML。有太多事情可能出错。 See this now famous StackOverflow answer.(甚至是made into a T-Shirt。)
相反,您应该使用为此目的而专门构建的技术。如果您使用的是网络浏览器,则可以使用this question的答案中所述的技术。但是在Azure Functions中,您的JavaScript不在浏览器中运行,而是在Node JS环境中运行。因此,您需要使用诸如Cheerio或htmlparser2(及其他)之类的库。
以下是使用Cheerio的示例:
var cheerio = require('cheerio');
var text = cheerio.load(html.body).text();
此外,关于这部分:
...因为我不是程序员...
是的。您现在显然正在编程。编写代码的任何人都是程序员。没有俱乐部或秘密握手。我们都是从这样开始。很好的问问题,祝您旅途愉快!