无法遍历字符串以查找正则表达式模式编号

我正在尝试制作一个应用程序,其中客户端将在 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});

    }

});


繁花如伊
浏览 146回答 2
2回答

忽然笑

这种模式(?:[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

我尝试使用您的数据以及您尝试从数据中提取 ip 的方式。这是它的屏幕截图。因此,您的正则表达式似乎返回一个数组。尝试console.log的ip变量,并检查它包含什么。在我的实验中,要访问 IP 地址,我必须这样做ip[1]。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript