Как извлечь все IP адреса из выделенного текста с помощью JavaScript букмарклета?

Помогите новичку с JavaScript

Недавно начал изучать JavaScript и столкнулся с задачей, которая кажется простой, но пока не могу разобраться самостоятельно.

Работаю с сайтом на WordPress, который используется как база знаний для нашего сообщества. Пытаюсь создать инструменты для упрощения модерации комментариев. Есть разные полезные расширения для браузера, но мне нужно получать список всех IP адресов из комментариев для анализа трафика и выявления закономерностей.

Что нужно сделать:

  • Выделить текст на странице с комментариями
  • Нажать на букмарклет в Firefox
  • Получить всплывающее окно со списком найденных IP адресов

Мое решение:

Методом проб и ошибок получилось скомбинировать разные подходы:

javascript:foundIPs=window.getSelection().toString().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g).join("<br>");
popupWindow=window.open('', 'Найденные IP адреса', 'width=250,height=400,scrollbars=yes');
popupWindow.document.write(foundIPs);

Вместо простого alert использую новое окно, чтобы был скролл при большом количестве адресов. IP адреса выводятся в столбик через <br> теги.

Вопрос: можно ли улучшить этот код или есть более элегантные способы решения задачи?

я бы добавил валидацию диапазонов - чтоб октеты не превышали 255. твоя регулярка хватает всё подряд, включая 300.400.500.600. попробуй через split и forEach проверять каждый IP отдельно. обязательно оберни в try-catch - букмарклеты крашатся на защищенных страницах. для модерации полезно сразу сортировать по количеству вхождений каждого адреса.

Код работает, но добавь проверку на null после match() - иначе словишь ошибку, если IP не найдутся. Лучше юзай более строгую регулярку: (?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) - она отсеет фейковые адреса типа 999.999.999.999. И через Set можешь дедуплицировать, чтоб одинаковые IP не дублировались.