Есть ли лучший способ превратить HTML в обычный текст в JavaScript, чем серия поиска / замены Regex - PullRequest
0 голосов
/ 26 декабря 2018

Моя цель - извлечь HTML через REST API и преобразовать его в обычный текст.Затем я отправляю его через другой API в 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 голосов
/ 26 декабря 2018

Вы можете использовать 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)

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