UNPKG

chrono-node

Version:

A natural language date parser in Javascript

40 lines 1.65 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*)?" + "(?:a[mn]\\s*?)?" + "(?:(diese[mn]|letzte[mn]|n(?:ä|ae)chste[mn])\\s*)?" + `(${matchAnyPattern(WEEKDAY_DICTIONARY)})` + "(?:\\s*(?:\\,|\\)|\\)))?" + "(?:\\s*(diese|letzte|n(?:ä|ae)chste)\\s*woche)?" + "(?=\\W|$)", "i"); const PREFIX_GROUP = 1; const SUFFIX_GROUP = 3; const WEEKDAY_GROUP = 2; export default class DEWeekdayParser extends AbstractParserWithWordBoundaryChecking { innerPattern() { return PATTERN; } innerExtract(context, match) { const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase(); const offset = WEEKDAY_DICTIONARY[dayOfWeek]; const prefix = match[PREFIX_GROUP]; const postfix = match[SUFFIX_GROUP]; let modifierWord = prefix || postfix; modifierWord = modifierWord || ""; modifierWord = modifierWord.toLowerCase(); let modifier = null; if (modifierWord.match(/letzte/)) { modifier = "last"; } else if (modifierWord.match(/chste/)) { modifier = "next"; } else if (modifierWord.match(/diese/)) { modifier = "this"; } return createParsingComponentsAtWeekday(context.reference, offset, modifier); } } //# sourceMappingURL=DEWeekdayParser.js.map