如何使用javascript小书签找到选定文本块中的所有IP地址?

时间:2020-03-05 18:56:06  来源:igfitidea点击:

我才刚刚开始学习JavaScript,所以我没有技巧来弄清楚我认为是一个小问题。

我正在与一个Wordpress博客一起工作,该博客作为我们社区的常见问题解答,并且我正在尝试汇总一些工具以简化评论的管理。 Internet Duct Tape的Greasemonkey工具(例如Comment Ninja)对其中的大多数功能很有帮助,但是我希望能够获得我们从中获取评论的所有IP地址的列表,以便跟踪趋势等。

我只希望能够在评论页面上选择一堆文本,然后在Firefox中单击一个书签(http://bookmarklets.com),这会弹出一个窗口,列出所有在选择中找到的IP地址。

更新:

我将levik和Jacob的答案结合起来得出以下结论:

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)

区别在于,我打开了一个类似于Jacob答案的新窗口,而不是像levik的答案那样发出警报消息。警报不提供滚动条,这对于具有许多IP地址的页面可能是个问题。但是,与Jacob的解决方案不同,我需要列表是垂直的,因此我使用了levik的提示来创建一个列表。
加入而不是levik的\ n。

谢谢大家的帮助。

解决方案

回答

这是一篇有关获取访问者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})+$/

回答

在Firefox中,我们可以执行以下操作:

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

工作原理:

  • 从浏览器获取选择文本(FF中的" document.getSelection()",在IE中为" document.selection.createRange()。text")
  • 应用正则表达式行进IP地址(如Muerr所建议)-这将导致字符串数组。
  • 将此数组连接成一个字符串,由返回字符分隔
  • 提醒该字符串

在IE上,我们获得选择的方式有些不同,但是原理是相同的。要使其成为跨浏览器,我们需要检查可用的方法。我们还可以执行更复杂的输出(例如创建浮动DIV并将所有IP插入其中)。

回答

作为书签

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"));
        }
    }
})

回答

请查看rot13小书签,以了解单击小书签时选择文本并执行操作(在本例中为替换)的示例。