Как исключить содержимое тега script из innerHTML при обработке в JavaScript

Проблема с обработкой HTML содержимого

Работаю с извлечением данных из HTML через document.documentElement.innerHTML, но в результатах появляется содержимое JavaScript кода, которое мне не нужно.

var pageContent = document.documentElement.innerHTML;
var matches = pageContent.match(/(.*)[:](.*)/g);
var cleanResults = [];

for (let i = 0; i < matches.length; i++) {
    cleanResults[i] = removeHtmlTags(matches[i]);
    console.log(cleanResults[i].split(/[\<>&=:]/));
}

function removeHtmlTags(text) {
    if (!text || text === '') return false;
    return text.toString().replace(/<[^>]*>/g, '');
}
<li>Товар ID : Товар 25</li>
<li>Баллы товара : 150</li>
<span>Статус : В наличии</span>

Получаю в консоли:

  1. ["Товар ID “, " Товар 25”]
  2. ["Баллы товара “, " 150”]
  3. [“Статус”, “В наличии”]
  4. [" var matches “, " pageContent.match(/(.*)”]
  5. [" console.log(cleanResults[i]. split(/["]

Как убрать из результатов строки 4 и 5, которые берутся из JavaScript кода? Нужны только данные из HTML разметки.

Клонируй DOM элемент и удали скрипты через removeChild. Примерно так: var clonedDoc = document.documentElement.cloneNode(true); var scripts = clonedDoc.querySelectorAll('script'); scripts.forEach(s => s.remove()); Потом берешь innerHTML с очищенной копии. Регулярки сломаются, если в скриптах есть хитрые конструкции или комментарии.

Попробуй использовать DOMParser. Создай новый документ, распарси туда свой HTML и с помощью querySelector убери теги script. А зачем разбирать весь документ? Может, лучше сразу обращаться к нужным элементам и вытаскивать данные оттуда?

Проблема в том, что innerHTML хватает всё подряд, включая скрипты. Сначала удали все теги script перед обработкой. Добавь эту строчку: pageContent = pageContent.replace(/<script[\s\S]*?<\/script>/gi, ''); сразу после получения innerHTML. Уберёт все скрипты с содержимым. Я так парсил страницы - работает отлично. Аналогично можно убрать style теги, если мешают.