diff --git a/src/common/string/slugify.ts b/src/common/string/slugify.ts index dc4015ff68..e9901faa76 100644 --- a/src/common/string/slugify.ts +++ b/src/common/string/slugify.ts @@ -12,8 +12,8 @@ export const slugify = (value: string, delimiter = "_") => { .replace(p, (c) => b.charAt(a.indexOf(c))) // Replace special characters .replace(/&/g, `${delimiter}and${delimiter}`) // Replace & with 'and' .replace(/[^\w-]+/g, "") // Remove all non-word characters - .replace(/-/, delimiter) // Replace - with delimiter - .replace(new RegExp(`/${delimiter}${delimiter}+/`, "g"), delimiter) // Replace multiple delimiters with single delimiter - .replace(new RegExp(`/^${delimiter}+/`), "") // Trim delimiter from start of text - .replace(new RegExp(`/-+$/`), ""); // Trim delimiter from end of text + .replace(/-/g, delimiter) // Replace - with delimiter + .replace(new RegExp(`(${delimiter})\\1+`, "g"), "$1") // Replace multiple delimiters with single delimiter + .replace(new RegExp(`^${delimiter}+`), "") // Trim delimiter from start of text + .replace(new RegExp(`${delimiter}+$`), ""); // Trim delimiter from end of text }; diff --git a/test/common/string/slugify.ts b/test/common/string/slugify.ts new file mode 100644 index 0000000000..7252fbbb47 --- /dev/null +++ b/test/common/string/slugify.ts @@ -0,0 +1,27 @@ +import { assert } from "chai"; +import { slugify } from "../../../src/common/string/slugify"; + +describe("slugify", () => { + // With default delimiter + assert.strictEqual(slugify("abc"), "abc"); + assert.strictEqual(slugify("ABC"), "abc"); + assert.strictEqual(slugify("abc DEF"), "abc_def"); + assert.strictEqual(slugify("abc-DEF"), "abc_def"); + assert.strictEqual(slugify("abc_DEF"), "abc_def"); + assert.strictEqual(slugify("abc å DEF"), "abc_a_def"); + assert.strictEqual(slugify("abc:DEF"), "abc_def"); + assert.strictEqual(slugify("abc&DEF"), "abc_and_def"); + assert.strictEqual(slugify("abc^^DEF"), "abcdef"); + assert.strictEqual(slugify("abc DEF"), "abc_def"); + assert.strictEqual(slugify("_abc DEF"), "abc_def"); + assert.strictEqual(slugify("abc DEF_"), "abc_def"); + assert.strictEqual(slugify("abc-DEF ghi"), "abc_def_ghi"); + assert.strictEqual(slugify("abc-DEF-ghi"), "abc_def_ghi"); + assert.strictEqual(slugify("abc - DEF - ghi"), "abc_def_ghi"); + assert.strictEqual(slugify("abc---DEF---ghi"), "abc_def_ghi"); + assert.strictEqual(slugify("___abc___DEF___ghi___"), "abc_def_ghi"); + + // With custom delimiter + assert.strictEqual(slugify("abc def", "-"), "abc-def"); + assert.strictEqual(slugify("abc-def", "-"), "abc-def"); +});