diff --git a/frontend/src/modules/parseTaskText.test.ts b/frontend/src/modules/parseTaskText.test.ts index 2d8e19e6b..d88baf205 100644 --- a/frontend/src/modules/parseTaskText.test.ts +++ b/frontend/src/modules/parseTaskText.test.ts @@ -650,6 +650,20 @@ describe('Parse Task Text', () => { expect(result.labels).toHaveLength(1) expect(result.labels[0]).toBe('today') }) + it('should parse labels with parentheses and remove them from text', () => { + const result = parseTaskText('a *"a (a)"') + + expect(result.text).toBe('a') + expect(result.labels).toHaveLength(1) + expect(result.labels[0]).toBe('a (a)') + }) + it('should parse labels with parentheses from the start', () => { + const result = parseTaskText('*"a (a)" a') + + expect(result.text).toBe('a') + expect(result.labels).toHaveLength(1) + expect(result.labels[0]).toBe('a (a)') + }) }) describe('Project', () => { diff --git a/frontend/src/modules/parseTaskText.ts b/frontend/src/modules/parseTaskText.ts index d725a05c9..8e1fbb045 100644 --- a/frontend/src/modules/parseTaskText.ts +++ b/frontend/src/modules/parseTaskText.ts @@ -276,18 +276,21 @@ const getRepeats = (text: string): repeatParsedResult => { } } +const escapeRegExp = (s: string): string => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + export const cleanupItemText = (text: string, items: string[], prefix: string): string => { items.forEach(l => { if (l === '') { return } + const escaped = escapeRegExp(l) text = text - .replace(new RegExp(`\\${prefix}'${l}' `, 'ig'), '') - .replace(new RegExp(`\\${prefix}'${l}'`, 'ig'), '') - .replace(new RegExp(`\\${prefix}"${l}" `, 'ig'), '') - .replace(new RegExp(`\\${prefix}"${l}"`, 'ig'), '') - .replace(new RegExp(`\\${prefix}${l} `, 'ig'), '') - .replace(new RegExp(`\\${prefix}${l}`, 'ig'), '') + .replace(new RegExp(`\\${prefix}'${escaped}' `, 'ig'), '') + .replace(new RegExp(`\\${prefix}'${escaped}'`, 'ig'), '') + .replace(new RegExp(`\\${prefix}"${escaped}" `, 'ig'), '') + .replace(new RegExp(`\\${prefix}"${escaped}"`, 'ig'), '') + .replace(new RegExp(`\\${prefix}${escaped} `, 'ig'), '') + .replace(new RegExp(`\\${prefix}${escaped}`, 'ig'), '') }) return text }