Files
SnowLuma/.pnpm-store/v11/files/9e/c478152b14cd327681d57658857f4c40844daba5c68ad6f3702ac625b39a511d890e2ba0d955cf8d51ef4b200a1bd700a8e0687cedc12d648497f592d1e70a
TanTan 2a69b23b47
Dev Build / cleanup (push) Canceled after 0s
Dev Build / typecheck (push) Canceled after 0s
Dev Build / build (linux-arm64, ubuntu-24.04-arm, linux-arm64) (push) Canceled after 0s
Dev Build / build (linux-x64, ubuntu-latest, linux-x64) (push) Canceled after 0s
Dev Build / build (win-x64, windows-latest, win32-x64) (push) Canceled after 0s
Dev Build / dispatch-dev-docker (push) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

37 lines
1.2 KiB
Plaintext

"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;