Как найти все IP-адреса в выделенном блоке текста с помощью букмарклета javascript? - PullRequest
2 голосов
/ 16 сентября 2008

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

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

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

Обновление:

Я как бы скомбинировал ответы от Левик и Иаков , чтобы придумать это:

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)

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

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

Ответы [ 5 ]

3 голосов
/ 16 сентября 2008

В 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-адреса).

1 голос
/ 16 сентября 2008

как букмарклет

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

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

Как это сделать в Ubiquity

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"));
        }
    }
})
1 голос
/ 16 сентября 2008

Используйте регулярное выражение для определения 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})+$/
0 голосов
/ 16 сентября 2008

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

0 голосов
/ 16 сентября 2008

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

...