Javascript Regex: How To Split Regex Subexpression Matches In To Multi-dimensional String Arrays?
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-24:1.79;25-99:1.69;100-149:1.59;150-199:1.49;20
Solution 1:
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"]
Solution 2:
var r = /(\d+)[-+](\d*):(\d+\.?\d*);?/g;
var s = "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";
var match;
while ((match = r.exec(s)) != null) {
console.log("From " + match[1] + " to " + match[2] + " is " + match[3]);
}
The console.log()
call is a Firefox/Firebug call. You can of course use alert()
, document.write()
or whatever else suits.
See RegExp object reference, in particular the RegExp methods, most notably RegExp.exec()
.
Solution 3:
The simpliest way to do it - using split method of String:
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";
myvar.split(';');
that produced:
["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"]
Post a Comment for "Javascript Regex: How To Split Regex Subexpression Matches In To Multi-dimensional String Arrays?"