2017-05-02 1 views
0

Ich habe eine Protokolldatei, wobei jede Zeile mit diesen Daten hat:Node.js - Regex Test immer falsch auf Datei

[Thu Mar 30 2017 11:24:51 GMT+0100 (WEST)] {"serial":"CA-2M-1107619","type":"iface","body":{"action":"up","device":"tun_man","ip":"127.255.0.10","ip6":"2016:900d:c0de::1001"} 

Ich mag die Linie analysieren und den Zeitstempel Thu Mar 30 2017 11:24:51 GMT+0100 (WEST) und die Daten zwischen {} zu erhalten.

Kann mir jemand dabei helfen?

var lineReader = require('line-reader'); 
var Regex = require('regex'); 
var regexTimestamp = new Regex("/\w+\s\w+\s\d+\s\d+\s\d+:\d+:\d+\s\w+\+\d+\s\(\w+\)/"); 
var regexData = new Regex("/{.+}/"); 

var path = '/var/log/wscontroller_logevents1.log'; 
lineReader.open(path, function(err, reader) { 
    if (err) throw err; 
    if (reader.hasNextLine()) { 
    reader.nextLine(function(err, line) { 
     try { 
     if (err) throw err; 
     var testLine = '[Fri Apr 21 2017 13:09:51 GMT+0100 (WEST)] {"serial":"CA-2M-1128568","type":"iface","body":{"action":"ifupdate","device":"wan","ip":"","ip6":""}}'; 
     var testDate = '[Fri Apr 21 2017 13:44:53 GMT+0100 (WEST)]'; 
     var testData = '{"serial":"CA-2M-1128568","type":"iface","body":{"action":"ifupdate","device":"wan","ip":"","ip6":""}}'; 
     console.log('-----'); 
     console.log('-----'); 
     console.log('line', line); 
     console.log('-----'); 
     console.log('-----'); 
     console.log('Date: ',regexTimestamp.test(testDate)); 
     console.log('Data: ',regexData.test(testData)); 
     } finally { 
     reader.close(function(err) { 
      if (err) throw err; 
     }); 
     } 
    }); 
    } 
    else { 
    reader.close(function(err) { 
     if (err) throw err; 
    }); 
    } 
}); 

Antwort

0

Sie könnten den Reverse-Ansatz verwenden, suchen Sie den Inhalt in Klammern.

var regexTimestamp = /\[(.*)\]/; 

// ... 

console.log('Date: ',regexTimestamp.test(testDate)); 
// [ 
// "[Fri Apr 21 2017 13:44:53 GMT+0100 (WEST)]", 
// "Fri Apr 21 2017 13:44:53 GMT+0100 (WEST)" 
// ]