从HTML过滤代理

如何解决从HTML过滤代理

我正在制作一个开放源代码的代理刮板,该刮板请求一个URL,获取正文,检查是否是代理等...

但是,这仅适用于RAW文本。而且我想从收到的HTML中过滤所有代理

filterProxies(text) {
    if (typeof (text) == 'string') {
        let regx = /^(\d{1,3}\.\d{1,3})(?:\s+|\s*:\s*)(\d{2,5})$/img;
        return [...text.matchAll(regx)]
    } else {
        throw new Error('\'.filterProxies(text)\': "text" is not an String.');
    }
}

此正则表达式可用于检查字符串是否是代理,但在我尝试过滤代理时不起作用。

解决方法

let str = '<a>127.0.0.1</a> '
        + '<b>127.0.0.1:4000</b> '
        + '<div>127.0.0.1:4100</div> '
        + '<err1>001.2.3.4</err1> '
        + '<err2>1.2.3.4444</err2> '
        + '<err3>1.2.3.256</err3>';
let regex1 = /\d{1,3}\.\d{1,3}(:\d{1,5})?/g;
let result1 = str.match(regex1);
console.log('result1: '+ JSON.stringify(result1,null,' '));

let regex2 = /(?<!\d)([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}(:\d{1,5})?(?!\d)/g;
let result2 = str.match(regex2);
console.log('result2: '+ JSON.stringify(result2,' '));

控制台输出:

result1: [
 "127.0.0.1","127.0.0.1:4000","127.0.0.1:4100","001.2.3.4","1.2.3.444","1.2.3.256"
]
result2: [
 "127.0.0.1","127.0.0.1:4100"
]

说明:

  • 输入字符串有6个地址,其中3个有效范围,3个无效范围
  • regex1使用可选的端口号进行简单的ipv4地址检测,而无需范围检查
  • regex2使用适当的字节范围检查0 ... 255(带有可选的端口号)进行ipv4地址检测
  • regex2不会检查端口号的范围,可以像检查字节一样来完成
  • 有关regex2的详细信息:
  • (?<!\d)-从负向后查找开始以排除数字
  • ([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])-或为0-9、10-99、100-199、200-249、250-255的格式
  • (\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}-后跟3个点和与以前相同的OR'ed模式实例
  • (:\d{1,5})?-后接可选端口号
  • (?!\d)-提前否定以确保没有数字

可以将正则表达式增强为支持ipv6

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?