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

Поиск IP-адресов в выделенном тексте

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

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

Хочу создать букмарклет для Firefox, который работал бы так: выделяю текст на странице с комментариями, нажимаю на букмарклет, и открывается новое окно со списком всех найденных IP-адресов.

Мое решение:

В итоге получилось объединить несколько подходов и создать такой код:

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

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

Все работает как нужно!

Неплохое решение! А как насчет IPv6 адресов? Они тоже встречаются в логах. Может стоит расширить регулярку? И еще вопрос - а частные адреса типа 192.168.x.x тоже нужны для анализа или только публичные интересуют?

А что если выделенный текст не содержит IP-адреса? Твой код упадет с ошибкой. Лучше добавить проверку на null после match(). Что-то типа foundIPs = selection.match(/regex/) || [] и потом проверить длину массива. Иначе пользователь получит белый экран вместо нормального сообщения. Из опыта знаю - такие мелочи потом очень раздражают в продакшене.

Хорошая идея с отдельным окном! Я бы еще посоветовал добавить заголовок в окно, чтобы было понятнее. Можно дописать что-то вроде resultWindow.document.write('<h3>Найденные IP:</h3>' + foundIPs);. И кстати, твоя регулярка найдет и невалидные адреса типа 999.999.999.999 - если нужна точность, стоит усложнить паттерн. Но для большинства задач модерации твой вариант вполне сойдет, проще и быстрее работает.