litejs
Version:
Single-page application framework
33 lines (25 loc) • 920 B
JavaScript
function createParser(def) {
var maskRe = /(\[)((?:\\?.)*?)\]|([YMD])\3\3\3?|([YMDHhmsWSZ])(\4?)|[uUASwoQ]|(["\\\n\r\u2028\u2029])/g
, escapeRe = /[.*+?^=!:${}()|\[\]\/\\]/g
, pos = {Y:0, M:1, D:2, h:3, m:4, s:5, S:6}
, f = []
, r = []
, g = 1
, i = 0
, len = def.length
for (; i<len; i++) {
var startLen = g
, arr = [1970, 0, 1, 0, 0, 0, 0]
, _re = def[i].replace(maskRe, function(match, quote, text, MD, single, pad, esc) {
return esc || text ?
(esc || text).replace(escapeRe, "\\$&") :
(arr[pos[MD || single]]="m[" + (g++) + "]") && "(\\d+)"
})
if (arr[1]) arr[1]+="-1"
//arr[4]+="-(" + new Date().getTimezoneOffset() + ")"
f.push("m[" + startLen + "]?new Date(Date.UTC(" + arr + "))")
r.push(_re)
}
return Function("r", "return function(u){var m=r.exec(u);return m?" + f.join(":") + ":null:null}")(RegExp("^(?:" + r.join("|") + ")$"))
}
exports.createParser = createParser