// eslint-disable-next-line no-control-regex const rControl = /[\u0000-\u001F]/g const rSpecial = /[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'“”‘’<>,.?/]+/g const rCombining = /[\u0300-\u036F]/g /** * Default slugification function */ export function slugify(str: string): string { return str .normalize('NFKD') // Remove accents .replace(rCombining, '') // Remove control characters .replace(rControl, '') // Replace special characters .replace(rSpecial, '-') // Remove continuos separators .replace(/-{2,}/g, '-') // Remove prefixing and trailing separators .replace(/^-+|-+$/g, '') // ensure it doesn't start with a number .replace(/^(\d)/, '_$1') // lowercase .toLowerCase() }