JavaScript Regex: How to split Regex subexpression matches in to multi-dimensional string arrays?

前端 未结 3 1189
温柔的废话
温柔的废话 2021-01-03 14:15

How would you split Regex subexpression matches in to multi-dimensional string arrays?

I have a \"myvar\" string of:

1-4:2;5-9:1.89;10

3条回答
  •  臣服心动
    2021-01-03 14:38

    You didn't say what the exact output you expect, but I imagine something like this output may be intuitive.

    Given:

    var myvar = "1-4:2;5-9:1.89;10-24:1.79;25-99:1.69;100-149:1.59;150-199:1.49;200-249:1.39;250+:1.29";
    

    A quick way to capture all sub-matches is:

    var matches = [];
    myvar.replace(/(\d+)[-+](\d*):(\d+\.?\d*);?/g, function(m, a, b, c) {
        matches.push([a, b, c])
    });
    

    (Note: you can capture the same output with a [potentially more readable] loop):

    var myreg = /(\d+)[-+](\d*):(\d+\.?\d*);?/g;
    var matches = [];
    while(myreg.exec(myvar)) {
        matches.push([RegExp.$1, RegExp.$2, RegExp.$3])
    }
    

    Either way, the outcome is an array of matches:

    matches[0]; // ["1", "4", "2"]
    matches[1]; // ["5", "9", "1.89"]
    matches[2]; // ["10", "24", "1.79"]
    matches[3]; // ["25", "99", "1.69"]
    matches[4]; // ["100", "149", "1.59"]
    matches[5]; // ["150", "199", "1.49"]
    matches[6]; // ["200", "249", "1.39"]
    matches[7]; // ["250", "", "1.29"]
    

提交回复
热议问题