UNPKG

chrono-node

Version:

A natural language date parser in Javascript

36 lines (30 loc) 1.4 kB
import { ParsingContext } from "../../../chrono"; import { ParsingResult } from "../../../results"; import { MONTH_DICTIONARY, YEAR_PATTERN, parseYear } from "../constants"; import { matchAnyPattern } from "../../../utils/pattern"; import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary"; // tháng 3 năm 1975 | tháng ba năm 1975 | tháng chạp | tháng giêng/1975 const PATTERN = new RegExp( "(" + matchAnyPattern(MONTH_DICTIONARY) + ")" + "(?:\\s*(?:năm|/)\\s*(" + YEAR_PATTERN + "))?" + "(?=\\W|$)", "i" ); const MONTH_GROUP = 1; const YEAR_GROUP = 2; export default class VIMonthYearParser extends AbstractParserWithWordBoundaryChecking { innerPattern(): RegExp { return PATTERN; } innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingResult { const month = MONTH_DICTIONARY[match[MONTH_GROUP].toLowerCase()]; if (!month) return null; const result = context.createParsingResult(match.index, match[0]); result.start.assign("month", month); result.start.imply("day", 1); if (match[YEAR_GROUP]) { result.start.assign("year", parseYear(match[YEAR_GROUP])); } else { result.start.imply("year", context.reference.getDateWithAdjustedTimezone().getFullYear()); } return result; } }