* feat(plugin-md-power): compat obsidian official markdown syntax * chore: tweak * chore: tweak * chore: tweak * chore: tweak
27 lines
743 B
TypeScript
27 lines
743 B
TypeScript
// 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()
|
|
}
|