我正在尝试制作一个应用程序,其中客户端将在 textarea 中搜索一些字符串,并且该字符串将被循环以查找 IP 地址。如果它找到一个 IP,那么它将获取它的值并在 API 中使用它来请求更多数据。客户端搜索的字符串将始终具有 IP。但我没有得到一个IP。这是代码:HTML<div class="row"> <div class="col-sm-12 mb-5"> <form action="/finder" method="GET" id="ipForm"> <textarea type="text" name="header" id="form-input" class="form-control form-input form-inline justify-content-center" required></textarea> <input type="submit" class="btn btn-primary" id="form-submit" value="CHECK"> </form> </div></div>路由器router.get("/finder", (req, res) => { if(req.query.header) { var query = req.query.header; var rawQuery = query.split("\n"); for(var i = 0; i < rawQuery.length; i++) { var ip = /Received:\s+from.*?\[((?:[0-9]{1,3}\.){3}[0-9]{1,3})\]/i.exec(rawQuery[i]); if(ip !== null) { var url = "https://api.ipregistry.co/" + ip; request(url, function(error, response, body) { if(!error && response.statusCode === 200) { const data = JSON.parse(body); res.render("../views/finder", {data: data}); } }); }else{ // var data = "Unable to retrieve data."; // res.render("../views/finder", {data: data}); console.log("no ip found"); } } }else{ res.render("../views/finder", {data: null}); }});
2 回答
忽然笑
TA贡献1806条经验 获得超5个赞
这种模式(?:[0-9]{1,3}\.){3}[0-9]{1,3}
肯定会返回一个 IP。如果您期望多个 Ips,您可能只想使用/(?:[0-9]{1,3}\.){3}[0-9]{1,3}/g
而不是/(?:[0-9]{1,3}\.){3}[0-9]{1,3}/i
全局搜索而不是循环遍历句子。
在您的问题中,您正在添加额外的正则表达式来搜索“从 IP_ADDRESS 接收”,并且这些额外的文本也必须匹配。尝试在没有它的情况下匹配 IP。
慕的地8271018
TA贡献1796条经验 获得超4个赞
我尝试使用您的数据以及您尝试从数据中提取 ip 的方式。这是它的屏幕截图。因此,您的正则表达式似乎返回一个数组。尝试console.log
的ip
变量,并检查它包含什么。在我的实验中,要访问 IP 地址,我必须这样做ip[1]
。
添加回答
举报
0/150
提交
取消