Files
NapCatQQ/.pnpm-store/v3/files/ec/e6377e069655c78c65807480600bbc5d25f5502b79b742e7913c8aeac8d570ed523fc8250b8ca6999206b2dea34f7e9961739e72cacf960d1c8779dc1436e6
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

38 lines
1.2 KiB
Plaintext

import units from "./units.mjs";
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 };
}
export {
compile as default
};