与一系列Regex搜索/替换相比,是否有更好的方法将HTML转换为JavaScript中的纯文本

时间:2018-12-25 22:21:21

标签: javascript regex text

我的目标是通过REST API检索HTML并将其转换为纯文本。然后,我通过另一个API将其发送到Slack,据我所知,Slack不接受HTML。

我正在使用一系列Regex脚本来完成此操作。

var noHtml = text.replace(/<(?:.|\n)*?>/gm, '');
var noHtmlEncodeSpace = noHtml.replace(/&nbsp;/g, ' ');
var noHtmlEncodersquo = noHtmlEncodeSpace.replace(/&rsquo;/g, "'");
var noHtmlEncodeldsquo = noHtmlEncodersquo.replace(/&lsquo;/g, "'");
var noHtmlEncodeSingleQuote = noHtmlEncodeldsquo.replace(/&#39;/g, "'");
var noHtmlEncodeldquo = noHtmlEncodeSingleQuote.replace(/&ldquo;/g, "`");
var noHtmlEncodeDoubleQuote = noHtmlEncodeldquo.replace(/&quot;/g, "`");
var noHtmlEncoderdquo = noHtmlEncodeDoubleQuote.replace(/&rdquo;/g, "`"); 

结果符合预期。但是,将HTML转换为纯文本似乎是JavaScript中一项常见的任务,那就是可以有一种更聪明的方法来实现它。

我是JavaScript新手。谢谢您的指导。

1 个答案:

答案 0 :(得分:3)

您可以使用DOMParser安全地将HTML字符串解析为文档,然后可以检索文档的textContent

const htmlStr = `<div>
foo &nbsp;&nbsp;  &rsquo;&rsquo;
</div>
<script>
alert('evil');
</` + `script>
<img src="badsrc" onerror="alert('evil')">`;


const doc = new DOMParser().parseFromString(htmlStr, 'text/html');
console.log(doc.body.textContent);

根据所需的文本间距,您可以改用innerText属性:

doc.body.innerText

(例如,这与设置新创建的元素的innerHTML相反,这样做并不安全-可以在textContent被执行之前执行“邪恶”脚本检索到)