28 lines
730 B
JavaScript
28 lines
730 B
JavaScript
|
// @ts-check
|
||
|
|
||
|
/**
|
||
|
* # Return the slug of a string
|
||
|
* @param {string} str input
|
||
|
* @returns {string} slug or empty string in case of error
|
||
|
* @example
|
||
|
* slugify("Hello World") // "hello-world"
|
||
|
* slugify("Yes!") // "yes"
|
||
|
* slugify("Hello!!! World!") // "hello-world"
|
||
|
*/
|
||
|
module.exports = function slugify(str) {
|
||
|
try {
|
||
|
return String(str)
|
||
|
.trim()
|
||
|
.toLowerCase()
|
||
|
.replace(/ {2,}/g, " ")
|
||
|
.replace(/ /g, "-")
|
||
|
.replace(/[^a-z0-9]/g, "-")
|
||
|
.replace(/-{2,}/g, "-")
|
||
|
.replace(/^-/, "")
|
||
|
.replace(/-$/, "");
|
||
|
} catch (/** @type {any} */ error) {
|
||
|
console.log(`Slugify ERROR: ${error.message}`);
|
||
|
return "";
|
||
|
}
|
||
|
};
|