在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ nodejs 正則匹配結(jié)果有問題?

nodejs 正則匹配結(jié)果有問題?

請問這個正則有問題嗎,獲取formhash的值,但是結(jié)果卻有很多null是怎么回事?

var http = require("http");

var url = {
    host:"bbs.colg.cn", 
    path:"/thread-7076705-1-1.html", 
    method:"GET"};

http.get(url,function(get){
    get.setEncoding("utf8");
    get.on("data",(data)=>{
        var data = data.match(/formhash" value="(.*?)"/g);
        console.log(data);
    });
});

null
null
null
null
null
[ 'formhash" value="3807b922"', 'formhash" value="3807b922"' ]
null
null

回答
編輯回答
陌南塵

這個問題不是正則的問題。

http 中的data事件是在有數(shù)據(jù)片段到來時觸發(fā),而不是全部數(shù)據(jù)返回時才觸發(fā)??墒褂孟旅娴拇a片段實驗:

var http = require("http");
var fs = require('fs');

var url = {
    host:"bbs.colg.cn",
    path:"/thread-7076705-1-1.html",
    method:"GET"};

http.get(url,function(get){
    get.setEncoding("utf8");
    var result = '';
    var i = 0;
    get.on("data",(data)=>{
        result += data;
        fs.writeFileSync('./tmp/' + i +  '.html', data, 'utf-8');
        i++;
        var data = data.match(/formhash" value="(.*?)"/g);
    });
});

我測試的結(jié)果是:共生產(chǎn)了37個文件;

在沒有formhash的data中,返回的就是 null。

這個問題的解決方案是在數(shù)據(jù)全部獲取到時,再使用正則,這就用到end事件。

例如:

var http = require("http");
var fs = require('fs');

var url = {
    host:"bbs.colg.cn",
    path:"/thread-7076705-1-1.html",
    method:"GET"};

http.get(url,function(get){
    get.setEncoding("utf8");
    var result = '';
    get.on("data",(data)=>{
        result += data;
    });
    get.on("end", (data) => {
        var res = result.match(/formhash" value="(.*?)"/g);
        console.log(res);
    })
});
2018年8月12日 04:52