【问题标题】:javascript regular expression match only returning last matchjavascript正则表达式匹配只返回最后一个匹配
【发布时间】:2013-12-21 03:17:13
【问题描述】:

我有一个小节点应用程序,它接受一些输入,应用正则表达式来提取一些信息,并且应该返回一个匹配数组。所有这一切都非常简单,但我看到的行为不是预期的。我的理解是,如果我输入的多行与此正则表达式匹配,那么每一行都将是匹配返回的数组中的一个元素。不幸的是,该数组看起来只包含最后一行的匹配组。有没有办法重写它,而不需要遍历输入两次,这样我就可以用每行匹配的数据填充嵌套数组?将匹配组作为元素返回会很棒,但我需要为每一行执行此操作。最终目标是将所有这些转换为格式化的 JSON 以供下游应用程序使用。

感谢您查看...

现在是代码

也可在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 是的,完全没有必要。感谢您指出这一点。

标签: javascript regex arrays node.js


【解决方案1】:

re.exec 每次执行时只返回一个匹配项。如果你想要一个包含所有匹配项的数组,你需要这样做:

var matchedData = [];
var match;
while (match = re.exec(this.data)) {
    matchedData.push(match);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多