Added support for more formats of dates extraction from titles

- \[dd-mm-yyyy] and \[mm-dd-yyyy]
- main README.md updated accordingly
This commit is contained in:
SebastianMC 2025-01-23 23:04:14 +01:00
parent ac263a7407
commit 44631bee4f
4 changed files with 45 additions and 2 deletions

View File

@ -175,7 +175,7 @@ The list of automatic sorting orders includes:
- `\R+`, `\.R+` or `\-R+` for Roman numbers
- `\d+`, `\.d+` or `\-d+` for plain numbers or compound plain numbers
- `\a+` to extract the last word from title
- `\[yyyy-mm-dd]`, `\[yyyy-dd-mm]`, `\[dd-Mmm-yyyy]`, `\[Mmm-dd-yyyy]`, `\[yyyy-Www (mm-dd)]`, `\[yyyy-Www]` or `\[yyyy-WwwISO]` to extract dates in various formats
- `\[yyyy-mm-dd]`, `\[yyyy-dd-mm]`, `\[dd-Mmm-yyyy]`, `\[mm-dd-yyyy]`, `\[dd-mm-yyyy]`, `\[Mmm-dd-yyyy]`, `\[yyyy-Www (mm-dd)]`, `\[yyyy-Www]` or `\[yyyy-WwwISO]` to extract dates in various formats
## Sorting by note name and note name with file extension

View File

@ -13,6 +13,9 @@ export const CompoundNumberDashRegexStr: string = ' *(\\d+(?:-\\d+)*)'; // Compo
export const Date_yyyy_mm_dd_RegexStr: string = ' *(\\d{4}-[0-3]*[0-9]-[0-3]*[0-9])'
export const Date_yyyy_dd_mm_RegexStr: string = Date_yyyy_mm_dd_RegexStr
export const Date_mm_dd_yyyy_RegexStr: string = ' *([0-3]*[0-9]-[0-3]*[0-9]-\\d{4})'
export const Date_dd_mm_yyyy_RegexStr: string = Date_mm_dd_yyyy_RegexStr
export const Date_dd_Mmm_yyyy_RegexStr: string = ' *([0-3]*[0-9]-(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\\d{4})'; // Date like 01-Jan-2020
export const Date_Mmm_dd_yyyy_RegexStr: string = ' *((?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-[0-3]*[0-9]-\\d{4})'; // Date like Jan-01-2020
@ -138,6 +141,8 @@ export function getNormalizedDate_NormalizerFn_for(separator: string, dayIdx: nu
export const getNormalizedDate_yyyy_mm_dd_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 2, 1, 0)
export const getNormalizedDate_yyyy_dd_mm_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 1, 2, 0)
export const getNormalizedDate_mm_dd_yyyy_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 1, 0, 2)
export const getNormalizedDate_dd_mm_yyyy_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 0, 1, 2)
export const getNormalizedDate_dd_Mmm_yyyy_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 0, 1, 2, MONTHS)
export const getNormalizedDate_Mmm_dd_yyyy_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 1, 0, 2, MONTHS)

View File

@ -17,7 +17,9 @@ import {
CompoundRomanNumberDashRegexStr,
CompoundRomanNumberDotRegexStr,
DASH_SEPARATOR,
Date_dd_mm_yyyy_RegexStr,
Date_dd_Mmm_yyyy_RegexStr,
Date_mm_dd_yyyy_RegexStr,
Date_Mmm_dd_yyyy_RegexStr,
Date_yyyy_dd_mm_RegexStr,
Date_yyyy_mm_dd_RegexStr,
@ -25,7 +27,9 @@ import {
Date_yyyy_Www_RegexStr,
Date_yyyy_WwwISO_RegexStr,
DOT_SEPARATOR,
getNormalizedDate_dd_mm_yyyy_NormalizerFn,
getNormalizedDate_dd_Mmm_yyyy_NormalizerFn,
getNormalizedDate_mm_dd_yyyy_NormalizerFn,
getNormalizedDate_Mmm_dd_yyyy_NormalizerFn,
getNormalizedDate_yyyy_dd_mm_NormalizerFn,
getNormalizedDate_yyyy_mm_dd_NormalizerFn,
@ -363,6 +367,8 @@ const Date_yyyy_mm_dd_RegexSymbol: string = '\\[yyyy-mm-dd]'
const Date_yyyy_dd_mm_RegexSymbol: string = '\\[yyyy-dd-mm]'
const Date_dd_Mmm_yyyy_RegexSymbol: string = '\\[dd-Mmm-yyyy]'
const Date_Mmm_dd_yyyy_RegexSymbol: string = '\\[Mmm-dd-yyyy]'
const Date_dd_mm_yyyy_RegexSymbol: string = '\\[dd-mm-yyyy]'
const Date_mm_dd_yyyy_RegexSymbol: string = '\\[mm-dd-yyyy]'
const Date_yyyy_Www_mm_dd_RegexSymbol: string = '\\[yyyy-Www (mm-dd)]'
const Date_yyyy_Www_RegexSymbol: string = '\\[yyyy-Www]'
const Date_yyyy_WwwISO_RegexSymbol: string = '\\[yyyy-WwwISO]'
@ -389,6 +395,8 @@ const sortingSymbolsArr: Array<string> = [
escapeRegexUnsafeCharacters(Date_yyyy_dd_mm_RegexSymbol),
escapeRegexUnsafeCharacters(Date_dd_Mmm_yyyy_RegexSymbol),
escapeRegexUnsafeCharacters(Date_Mmm_dd_yyyy_RegexSymbol),
escapeRegexUnsafeCharacters(Date_dd_mm_yyyy_RegexSymbol),
escapeRegexUnsafeCharacters(Date_mm_dd_yyyy_RegexSymbol),
escapeRegexUnsafeCharacters(Date_yyyy_Www_mm_dd_RegexSymbol),
escapeRegexUnsafeCharacters(Date_yyyy_WwwISO_RegexSymbol),
escapeRegexUnsafeCharacters(Date_yyyy_Www_RegexSymbol),
@ -463,6 +471,8 @@ export const Date_yyyy_mm_dd_NormalizerFn: NormalizerFn = (s: string) => getNorm
export const Date_yyyy_dd_mm_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_yyyy_dd_mm_NormalizerFn(s)
export const Date_dd_Mmm_yyyy_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_dd_Mmm_yyyy_NormalizerFn(s)
export const Date_Mmm_dd_yyyy_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_Mmm_dd_yyyy_NormalizerFn(s)
export const Date_dd_mm_yyyy_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_dd_mm_yyyy_NormalizerFn(s)
export const Date_mm_dd_yyyy_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_mm_dd_yyyy_NormalizerFn(s)
export const Date_yyyy_Www_mm_dd_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_yyyy_Www_mm_dd_NormalizerFn(s)
export const Date_yyyy_WwwISO_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_yyyy_WwwISO_NormalizerFn(s)
export const Date_yyyy_Www_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_yyyy_Www_NormalizerFn(s)
@ -481,6 +491,8 @@ export enum AdvancedRegexType {
Date_yyyy_dd_mm,
Date_dd_Mmm_yyyy,
Date_Mmm_dd_yyyy,
Date_dd_mm_yyyy,
Date_mm_dd_yyyy,
Date_yyyy_Www_mm_dd_yyyy,
Date_yyyy_WwwISO,
Date_yyyy_Www
@ -548,6 +560,16 @@ const sortingSymbolToRegexpStr: { [key: string]: RegExpSpecStr } = {
normalizerFn: Date_Mmm_dd_yyyy_NormalizerFn,
advancedRegexType: AdvancedRegexType.Date_Mmm_dd_yyyy
},
[Date_dd_mm_yyyy_RegexSymbol]: { // Intentionally retain character case
regexpStr: Date_dd_mm_yyyy_RegexStr,
normalizerFn: Date_dd_mm_yyyy_NormalizerFn,
advancedRegexType: AdvancedRegexType.Date_dd_mm_yyyy
},
[Date_mm_dd_yyyy_RegexSymbol]: { // Intentionally retain character case
regexpStr: Date_mm_dd_yyyy_RegexStr,
normalizerFn: Date_mm_dd_yyyy_NormalizerFn,
advancedRegexType: AdvancedRegexType.Date_mm_dd_yyyy
},
[Date_yyyy_Www_mm_dd_RegexSymbol]: { // Intentionally retain character case
regexpStr: Date_yyyy_Www_mm_dd_RegexStr,
normalizerFn: Date_yyyy_Www_mm_dd_NormalizerFn,

View File

@ -5,7 +5,9 @@ import {
ConsumedFolderMatchingRegexp,
consumeFolderByRegexpExpression,
convertPlainStringToRegex,
Date_dd_mm_yyyy_NormalizerFn,
Date_dd_Mmm_yyyy_NormalizerFn,
Date_mm_dd_yyyy_NormalizerFn,
Date_Mmm_dd_yyyy_NormalizerFn,
Date_yyyy_dd_mm_NormalizerFn,
Date_yyyy_mm_dd_NormalizerFn,
@ -387,6 +389,8 @@ Week number interpreted in ISO standard \\[yyyy-WwwISO]
Week number interpreted in U.S. standard \\[yyyy-Www]
\\[yyyy-mm-dd] plain spec 1
\\[yyyy-dd-mm] plain spec 2
\\[dd-mm-yyyy] plain spec 3
\\[mm-dd-yyyy] plain spec 4
`
const expectedSortSpecsExampleSortingSymbols: { [key: string]: CustomSortSpec } = {
@ -479,11 +483,23 @@ const expectedSortSpecsExampleSortingSymbols: { [key: string]: CustomSortSpec }
regex: /^ *(\d{4}-[0-3]*[0-9]-[0-3]*[0-9]) plain spec 2$/i,
normalizerFn: Date_yyyy_dd_mm_NormalizerFn
}
}, {
type: CustomSortGroupType.ExactName,
regexPrefix: {
regex: /^ *([0-3]*[0-9]-[0-3]*[0-9]-\d{4}) plain spec 3$/i,
normalizerFn: Date_dd_mm_yyyy_NormalizerFn
}
}, {
type: CustomSortGroupType.ExactName,
regexPrefix: {
regex: /^ *([0-3]*[0-9]-[0-3]*[0-9]-\d{4}) plain spec 4$/i,
normalizerFn: Date_mm_dd_yyyy_NormalizerFn
}
}, {
type: CustomSortGroupType.Outsiders
}],
targetFoldersPaths: ['mock-folder'],
outsidersGroupIdx: 14
outsidersGroupIdx: 16
}
}