1
我有一個小的節點應用程序,需要一些輸入,應用正則表達式來提取一些信息,並應返回一個匹配數組。所有這一切都很簡單,但我所看到的行爲並不是預期的。我的理解是,如果我輸入了多條匹配此正則表達式的行,那麼每行都將是匹配返回的數組中的一個元素。不幸的是,它看起來像數組只包含最後一行的匹配組。有沒有辦法重寫這個,而不是迭代兩次輸入,這樣我就可以用每行匹配的數據填充一個嵌套數組?將比賽組作爲元素返回將是一件好事,但我需要爲每一行都做到這一點。最終目標是將所有這些轉換爲下游應用程序的格式化JSON。javascript正則表達式匹配只返回最後一個匹配
感謝您抽空看看...
現在CODE
也可以用於實驗在這裏一個cloud 9 IDE。
var util = require('util');
var re = /(processed)(.*?)\((.*?)\)(.*?)([0-9]\.[0-9]+[0-9])/g;
var data;
var returnData = [];
var Parser = function(input) {
util.log("Instantiating Parser");
this.data = input;
};
Parser.prototype.parse = function(callback) {
util.log("In the parser");
this.returnData = re.exec(this.data);
callback(this.returnData);
}
exports.Parser = Parser;
和測試文件:
var Parser = require("./parser.js").Parser;
var util = require('util');
var fs = require('fs');
var data = "worker[0] processed packet (0x2000000, 1200358, t) in 0.000021 seconds\n" +
"worker[0] processed packet (0x2000000, 400115, b) in 0.000030 seconds\n"+
" (0) Registration Stats: (1387305947, 0x3d00000a, 17024, 2504, 0, 400109, 400116, b)\n"+
"worker[0] processed packet (0x1000000, 400116, b) in 0.000045 seconds\n"+
"worker[0] processed packet (0x1000000, 1200369, t) in 0.000024 seconds\n";
util.log("creating new parser");
var Parser = new Parser(data);
util.log("calling parse");
Parser.parse(function(data) {
for (var i=0; i < data.length; i++)
util.log(data[i]);
});
這裏是debuggex正則表達式。
'[0-9] + [0-9]'這個子模式沒有意義。 –
@Casimir et Hippolyte yep,完全沒有必要。感謝您指出了這一點。 – janarde