Files
liquidjs/identifier.js
T
2016-06-14 00:31:24 +08:00

42 lines
1.0 KiB
JavaScript

const _ = require('lodash');
var singleQuoted = /^'[^']*'$/;
var doubleQuoted = /^"[^"]*"$/;
var number = /^(?:\d+\.?\d*|\.?\d+)$/;
var bool = /^(?:true|false)$/i;
var range = /^\((\d+)\.\.(\d+)\)$/;
var quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`);
var literal = new RegExp(`${quoted.source}|${range.source}|${bool.source}|${number.source}`, 'i');
var variable = /^[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*|\[\d+\])*$/;
var identifier = new RegExp(`${literal.source}|${variable.source}`, 'i');
exports.patterns = {
quoted, number, bool, range, literal
};
exports.isLiteral = function(str) {
return literal.test(str);
};
exports.isVariable = function(str) {
return variable.test(str);
};
exports.parseLiteral = function(str) {
var res;
if(res = str.match(number)){
return Number(str);
}
if(res = str.match(bool)){
return str.toLowerCase() === 'true';
}
if(res = str.match(quoted)){
return str.slice(1, -1);
}
if(res = str.match(range)){
return _.range(res[1], res[2]);
}
};