10
var http = require('http');
var urlOpts = {host: 'www.nodejs.org', path: '/', port: '80'};
http.get(urlOpts, function (response) {
response.on('data', function (chunk) {
var str=chunk.toString();
var re = new RegExp("(<\s*title[^>]*>(.+?)<\s*/\s*title)\>", "g")
console.log(str.match(re));
});

});

输出

user@dev ~ $ node app.js ['node.js'] null null

我只需要得到标题。

4

2 回答 2

7

我建议使用RegEx.exec而不是String.match. 您还可以使用文字语法定义正则表达式,并且只定义一次:

var http = require('http');
var urlOpts = {host: 'www.nodejs.org', path: '/', port: '80'};
var re = /(<\s*title[^>]*>(.+?)<\s*\/\s*title)>/gi;
http.get(urlOpts, function (response) {
    response.on('data', function (chunk) {
        var str=chunk.toString();
        var match = re.exec(str);
        if (match && match[2]) {
          console.log(match[2]);
        }
    });    
});

该代码还假设title将完全在一个块中,而不是在两个块之间拆分。最好保留块的聚合,以防title在块之间拆分。title一旦找到它,您可能还想停止寻找。

于 2012-10-26T13:41:03.567 回答
2

试试这个:

var re = new RegExp("<title>(.*?)</title>", "i");
console.log(str.match(re)[1]);
于 2012-10-26T13:40:43.490 回答