Задачка для веб-разработчиков по удалению комментов

Всплыла интересная задачка.
На некотором сайте есть некоторая секция комментов, выглядит примерно так:

<!--block_XXX_started-->
<div>some content here, always different</div>
<!--block_XXX_ended-->

Разумеется, XXX всегда меняется. И содержимое между этими блоками всегда разное
Вопрос: каким наилучшим образом можно селектнуть это вот содержимое между двумя комментами? Чтобы, например, модифицировать его как-нибудь ? Лучше использовать регулярку ? Или существует иной способ ?

Лига программистов

1.5K постов11.4K подписчика

Добавить пост

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

9
Автор поста оценил этот комментарий

Для такой задачи я бы делал так:

1. ищем в доме начальный коммент. Способов много, от топорной рекурсии по DOM, до современного TreeWalker.

2. как нашли коммент берем последовательно все его следующие соседи (nextSibling) и как только доходим до комментария закрывающего - останавливаемся.


Пример как можно найти начальный коммент через TreeWalker

const walker = document.createTreeWalker(
    document.body,
    NodeFilter.SHOW_COMMENT,
    {
         acceptNode(node) {
               return /block_.+_start$/.test(node.nodeValue)
                  ? NodeFilter.FILTER_ACCEPT
                  : NodeFillter.FILTER_REJECT
     }
});
const node = walker.firstChild();
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

спасибо! вечером попробую!

4
DELETED
Автор поста оценил этот комментарий

Regexp'ами можно сделать всё.
Но тут я бы советовал обратить внимание не на свойства блока, а на содержимое вложенных div'ов. По нему фильтровать проще, особенно если там аватарки из соцсетей подтягиваются.

раскрыть ветку (1)
Автор поста оценил этот комментарий

содержимое вложенных дивов слишком непредсказуемо, половина генерируется рандомно, вторая - используется где-то еще.

показать ответы
1
Автор поста оценил этот комментарий

<!--> это коммент. Он не даёт никаких гарантий на то, что идёт после него. Вы уверены, что идёте правильной дорогой?


Гуглите в сторону html query language, я не в курсе можно ли штатно парсить html и обрабатывать его структурно наподобие xquery/xpath/xslt, но это кажется наиболее идеологически правильным способом. Парсинг регулярками это более костыльный способ, но он проще и обычно быстрее.
раскрыть ветку (1)
Автор поста оценил этот комментарий

да, все верно, мне нужна модификация блока внутри комментов определенного формата, ошибки нет )