chrono-node
Version:
A natural language date parser in Javascript
65 lines • 2.44 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const dayjs_1 = __importDefault(require("dayjs"));
const AbstractParserWithWordBoundary_1 = require("../../../../common/parsers/AbstractParserWithWordBoundary");
const constants_1 = require("../constants");
const YEAR_GROUP = 1;
const MONTH_GROUP = 2;
const DAY_GROUP = 3;
class ZHHantDateParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
innerPattern() {
return new RegExp("(" +
"\\d{2,4}|" +
"[" + Object.keys(constants_1.NUMBER).join("") + "]{4}|" +
"[" + Object.keys(constants_1.NUMBER).join("") + "]{2}" +
")?" +
"(?:\\s*)" +
"(?:年)?" +
"(?:[\\s|,|,]*)" +
"(" +
"\\d{1,2}|" +
"[" + Object.keys(constants_1.NUMBER).join("") + "]{1,2}" +
")" +
"(?:\\s*)" +
"(?:月)" +
"(?:\\s*)" +
"(" +
"\\d{1,2}|" +
"[" + Object.keys(constants_1.NUMBER).join("") + "]{1,2}" +
")?" +
"(?:\\s*)" +
"(?:日|號)?");
}
innerExtract(context, match) {
const startMoment = dayjs_1.default(context.refDate);
const result = context.createParsingResult(match.index, match[0]);
let month = parseInt(match[MONTH_GROUP]);
if (isNaN(month))
month = constants_1.zhStringToNumber(match[MONTH_GROUP]);
result.start.assign("month", month);
if (match[DAY_GROUP]) {
let day = parseInt(match[DAY_GROUP]);
if (isNaN(day))
day = constants_1.zhStringToNumber(match[DAY_GROUP]);
result.start.assign("day", day);
}
else {
result.start.imply("day", startMoment.date());
}
if (match[YEAR_GROUP]) {
let year = parseInt(match[YEAR_GROUP]);
if (isNaN(year))
year = constants_1.zhStringToYear(match[YEAR_GROUP]);
result.start.assign("year", year);
}
else {
result.start.imply("year", startMoment.year());
}
return result;
}
}
exports.default = ZHHantDateParser;
//# sourceMappingURL=ZHHantDateParser.js.map
;