Как вы можете найти все IP-адреса в выделенном блоке текста с помощью букмарклета javascript?

StackOverflow https://stackoverflow.com/questions/72921

Вопрос

Я только начинаю изучать javascript, поэтому у меня нет навыков, чтобы разобраться в том, что, как я полагаю, является тривиальной проблемой.

Я работаю с блогом Wordpress, который служит часто задаваемыми вопросами для нашего сообщества, и я пытаюсь собрать воедино некоторые инструменты, чтобы упростить управление комментариями. Инструменты Greasemonkey от Internet Duct Tape, такие как Comment Ninja, полезны для большей части этого, но я хочу иметь возможность получить список всех IP-адресов, с которых мы получаем комментарии, чтобы отслеживать тенденции и так далее.

Я просто хочу иметь возможность выделить кучу текста на странице комментариев и щелкнуть букмарклет (http://bookmarklets.com) в Firefox появляется всплывающее окно со списком всех IP-адресов, найденных при выборе.

Обновить:

Я как бы объединил ответы из levik и Джейкоб чтобы придумать это:

javascript:ipAddresses=document.getSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g).join("<br>");newWindow=window.open('', 'IP Addresses in Selection', 'innerWidth=200,innerHeight=300,scrollbars');newWindow.document.write(ipAddresses)

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

Спасибо за всю помощь, ребята.

Это было полезно?

Решение

В Firefox вы могли бы сделать что-то вроде этого:

javascript:alert(
  document.getSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g)
  .join("\n"))

Как это работает:

  • Получает текст выделения из браузера ("document.getSelection()" в FF, в IE это было бы "document.selection.createRange().text")
  • Применяет регулярное выражение для преобразования IP-адресов (как предложено Muerr) - в результате получается массив строк.
  • Объединяет этот массив в одну строку, разделенную возвращаемыми символами
  • Предупреждает об этой строке

Способ получения выделения немного отличается в IE, но принцип тот же.Чтобы сделать его кроссбраузерным, вам нужно будет проверить, какой метод доступен.Вы также могли бы выполнить более сложный вывод (например, создать плавающий DIV и вставить в него все IP-адреса).

Другие советы

Используйте регулярное выражение для определения IP-адреса.Пара примеров:

/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/
/^([1-9][0-9]{0,2})+\.([1-9][0-9]{0,2})+\.([1-9][0-9]{0,2})+\.([1-9][0-9]{0,2})+$/

В качестве букмарклета

javascript:document.write(document.getSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g))

Просто создайте новую закладку и вставьте этот javascript в

Как это сделать в повсеместности

CmdUtils.CreateCommand({
    name: "findip",
    preview: function( pblock ) {
        var msg = 'IP Addresses Found<br/><br/> ';
        ips = CmdUtils.getHtmlSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g);
        if(ips){
            msg += ips.join("<br/>\n");
        }else{
            msg += 'None';
        }
        pblock.innerHTML = msg;
    },

    execute: function() {
        ips = CmdUtils.getHtmlSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g);
        if(ips){
            CmdUtils.setSelection(ips.join("<br/>\n"));
        }
    }
})

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

Взгляните на букмарклет rot13 ниже приведен пример выделения текста и выполнения действия (в данном случае подстановки) при нажатии на букмарклет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top