目标
将从Telligent (一个extranet平台)提取的HTML转换为纯文本并发送到Slack
设置
当事件发生时会触发Telligent网络钩子。Azure Logic接收事件JSON。JSON值在HTML中。Azure管道中的JavaScript 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();
};结果
单引号被成功地替换,当张贴在板条上时会精确地解析。
下面的双引号替换方法在Azure函数中抛出一个Status: 500 Internal Server Error。
不成功的替换方法
"\""
'"'
"
"'"'"
"["]"
"(")"将这些替换方法放入自己的var中也会引发相同的错误。例如:
var replace = "\""
...
var noHtmlEncodeDoubleQuote = noHtmlEncodeSingleQuote.replace(/"/g, replace);代码似乎是正确的,因为当我用类似于"的东西替换abc时,替换是成功的。
谢谢
请原谅我的JavaScript,因为我不是一个程序员,并试图简化我的工作流程。但是,我很感谢关于代码或我的整个方法的任何建议。
发布于 2018-12-10 03:23:26
通常,您不希望尝试使用正则表达式或字符串替换来解析HTML。有太多的事情可能会出错。看看这个现在著名的StackOverflow答案。 (甚至是制成T恤衫.)
相反,您应该使用一种专门为此目的而构建的技术。如果您是在web浏览器中,您可以使用这个问题答案中描述的技术。但是在Azure函数中,JavaScript不是在浏览器中运行,而是在Node环境中运行。因此,您需要使用一个库,如拜拜或htmlparser2 (和其他)。
下面是一个使用Cheerio的示例:
var cheerio = require('cheerio');
var text = cheerio.load(html.body).text();此外,关于这一部分:
..。因为我不是程序员..。
是的你是。你现在显然是在编程。任何编写代码的人都是程序员。没有俱乐部也没有秘密握手。我们都是这样开始的。很好的工作,问问题,祝你的旅程好运!
https://stackoverflow.com/questions/53698843
复制相似问题