1 |
|
2 | function createParser(def) {
|
3 | var maskRe = /(\[)((?:\\?.)*?)\]|([YMD])\3\3\3?|([YMDHhmsWSZ])(\4?)|[uUASwoQ]|(["\\\n\r\u2028\u2029])/g
|
4 | , escapeRe = /[.*+?^=!:${}()|\[\]\/\\]/g
|
5 | , pos = {Y:0, M:1, D:2, h:3, m:4, s:5, S:6}
|
6 | , f = []
|
7 | , r = []
|
8 | , g = 1
|
9 | , i = 0
|
10 | , len = def.length
|
11 |
|
12 | for (; i<len; i++) {
|
13 | var startLen = g
|
14 | , arr = [1970, 0, 1, 0, 0, 0, 0]
|
15 | , _re = def[i].replace(maskRe, function(match, quote, text, MD, single, pad, esc) {
|
16 | return esc || text ?
|
17 | (esc || text).replace(escapeRe, "\\$&") :
|
18 | (arr[pos[MD || single]]="m[" + (g++) + "]") && "(\\d+)"
|
19 | })
|
20 |
|
21 | if (arr[1]) arr[1]+="-1"
|
22 |
|
23 |
|
24 | f.push("m[" + startLen + "]?new Date(Date.UTC(" + arr + "))")
|
25 | r.push(_re)
|
26 | }
|
27 |
|
28 | return Function("r", "return function(u){var m=r.exec(u);return m?" + f.join(":") + ":null:null}")(RegExp("^(?:" + r.join("|") + ")$"))
|
29 | }
|
30 | exports.createParser = createParser
|
31 |
|
32 |
|