UNPKG

chrono-node

Version:

A natural language date parser in Javascript

41 lines 1.62 kB
import { WEEKDAY_DICTIONARY } from "../constants.js"; import { matchAnyPattern } from "../../../utils/pattern.js"; import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js"; import { createParsingComponentsAtWeekday } from "../../../common/calculation/weekdays.js"; const PATTERN = new RegExp("(?:(?:\\,|\\(|\\()\\s*)?" + "(?:(este|esta|pasado|pr[oó]ximo)\\s*)?" + `(${matchAnyPattern(WEEKDAY_DICTIONARY)})` + "(?:\\s*(?:\\,|\\)|\\)))?" + "(?:\\s*(este|esta|pasado|pr[óo]ximo)\\s*semana)?" + "(?=\\W|\\d|$)", "i"); const PREFIX_GROUP = 1; const WEEKDAY_GROUP = 2; const POSTFIX_GROUP = 3; export default class ESWeekdayParser extends AbstractParserWithWordBoundaryChecking { innerPattern() { return PATTERN; } innerExtract(context, match) { const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase(); const weekday = WEEKDAY_DICTIONARY[dayOfWeek]; if (weekday === undefined) { return null; } const prefix = match[PREFIX_GROUP]; const postfix = match[POSTFIX_GROUP]; let norm = prefix || postfix || ""; norm = norm.toLowerCase(); let modifier = null; if (norm == "pasado") { modifier = "this"; } else if (norm == "próximo" || norm == "proximo") { modifier = "next"; } else if (norm == "este") { modifier = "this"; } return createParsingComponentsAtWeekday(context.reference, weekday, modifier); } } //# sourceMappingURL=ESWeekdayParser.js.map