The problem
Need to create URL-friendly slugs from titles or names
The solution
function generateSlug(text, separator = '-') {
return text
.toString()
.toLowerCase()
.normalize('NFD') // Normalize Unicode
.replace(/[\u0300-\u036f]/g, '') // Remove diacritics
.replace(/[^a-z0-9\s-]/g, '') // Remove invalid chars
.replace(/\s+/g, separator) // Replace spaces with separator
.replace(new RegExp(`${separator}+`, 'g'), separator) // Replace multiple separators
.replace(new RegExp(`^${separator}|${separator}$`, 'g'), ''); // Trim separators
}Parameters
textstringText to convert to slug
separatorstringSeparator character (default: '-')
Put it to work
console.log(generateSlug('Hello World!')); // "hello-world"
console.log(generateSlug('JavaScript & Node.js')); // "javascript-nodejs"
console.log(generateSlug(' Café & Restaurant ', '_')); // "cafe_restaurant"
console.log(generateSlug(' Multiple Spaces Here ')); // "multiple-spaces-here"