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ます。リテラル構文を使用して正規表現を 1 回だけ定義することもできます。

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このコードは、が 2 つのチャンクに分割されず、完全に 1 つのチャンクになることも前提としています。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 に答える