在Node.JS中从Javascript正则表达式返回NULL

Getting Back NULL from Javascript Regular Expressions in Node.JS

本文关键字:正则表达式 返回 NULL Javascript 中从 Node JS      更新时间:2023-09-26

下面的代码是Node.js应用程序的一部分。我试图使用正则表达式来获得url部分,但有困难。当它被传递一个明显匹配的` req。Url '字符串,其中甚至regex.test(req.url)返回true,我从regex.match返回null。为什么如此?当我使用regex.match()而不使用regex.test()在前面时,我得到regex结果数组OK…但是我需要在实际应用程序中执行regex.test()。在regex.test()之后使用regex.match()是否可能/合法?

例如,当req.url = "/?format=html&path=/news/crawl/2015/10/01/http---newssite.com--crawl.html"时,我从regex.match获得null。事实上,没有任何字符串与以下代码匹配:

http.createServer(function (req, res) {
        if (req.method == 'GET') {
            var readRegex = /'?format=(json|html|txt)&path=(['w.'/_-]+)/g;
            var file_path, regex_results;
            console.log(req.url);
            switch (true) {
                case readRegex.test(req.url):
                    regex_results = readRegex.exec(req.url);
                    if (regex_results !== null) {
                        console.log(regex_results);                        
                    } else {
                        console.log("Error: 'regex_results' is null!");
                    }
                    break;
            }
        } else {
            res.writeHead(503, {'Content-Type': 'application/json'});
            res.end("{'error':'Method not yet implemented!'}");
        }
    }).listen(22000, '127.0.0.1');

regexp.exec()调用regexp.test()后失败的原因是regexp.test()regexp.lastIndex设置为字符串的末尾,这是最后一次匹配结束的地方。

所以当regexp.exec()执行时,它尝试从regexp.lastIndex(字符串的末尾)开始,它永远不会匹配任何东西,因为它是同一个字符串。

您可以通过regexp.lastIndex = 0;regexp.test()之后手动重置此属性。