partial support of plain numbers.

This commit is contained in:
Borys Levytskyi
2015-04-03 14:28:17 +03:00
parent a2c6b5bcd8
commit fd03747475
4 changed files with 76 additions and 21 deletions

View File

@@ -1,23 +1,51 @@
(function() {
var twoOperandsRegex = /^(\d+)(<<|>>|\||\&|\^)(\d+)$/;
var twoOperandsRegex = /^(\d+)(<<|>>|\||\&|\^)(\d+)$/;
var numbersList = /^((\d*)+\s?)+$/;
app.service('expression', {
parse: function(string) {
var matches = twoOperandsRegex.exec(string);
if(matches == null) {
return null;
var trimmed = string.replace(/^\s+|\s+$/, '');
var matches = twoOperandsRegex.exec(trimmed);
if(matches != null) {
return createCalculableExpression(matches);
}
return {
string:matches[0],
operand1: parseInt(matches[1], 10),
sign: matches[2],
operand2: parseInt(matches[3], 10),
result: function() {
return eval(string);
}
matches = numbersList.exec(string);
if(matches != null) {
return createListOfNumbersExpression(matches)
}
}
});
function createCalculableExpression(matches) {
var o1 = parseInt(matches[1], 10);
var o2 = parseInt(matches[3], 10);
return {
string: matches.input,
operand1: o1,
sign: matches[2],
operand2: o2,
calculate: function() {
return eval(this.string);
}
}
}
function createListOfNumbersExpression(matches) {
var numbers = [], i=0;
for(;i<matches.length; i++) {
numbers.push(parseInt(matches[i], 10));
}
return {
string:matches.input,
operands: numbers
}
}
})(window.app);