"use strict"; const units = require("./units.js"); const { YEAR, MONTH, DATE, HOUR, MINUTE, SECOND, MILLISECOND, UTC_OFFSET } = units; function escapeRegex(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } const TOKEN_MAP = { YYYY: { pattern: "(\\d{1,4})", key: YEAR }, // 年份 // YY: { pattern: '(\\d{1,2})', key: YEAR }, // 年份 MM: { pattern: "(\\d{1,2})", key: MONTH }, // 月份 DD: { pattern: "(\\d{1,2})", key: DATE }, // 日期 HH: { pattern: "(\\d{1,2})", key: HOUR }, // 小时 mm: { pattern: "(\\d{1,2})", key: MINUTE }, // 分钟 ss: { pattern: "(\\d{1,2})", key: SECOND }, // 秒 SSS: { pattern: "(\\d{1,3})", key: MILLISECOND }, // 毫秒 Z: { pattern: "(Z|[+-]\\d{2}(?::?\\d{2})?)", key: UTC_OFFSET } // 时区 }; const TOKEN_KEYS = Object.keys(TOKEN_MAP).sort((a, b) => b.length - a.length); const TOKEN_PATTERN = new RegExp(`(${TOKEN_KEYS.join("|")})`, "g"); function compile(formatString) { const matchedTokens = []; const pattern = escapeRegex(formatString).replace(TOKEN_PATTERN, (m) => { matchedTokens.push(m); return TOKEN_MAP[m].pattern; }); return { pattern, tokens: matchedTokens }; } module.exports = compile;