import {hasOwn} from '../util/core' let cache = {} const re = /[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g function lower(string) { return string.toLowerCase() } export function slugify(str) { if (typeof str !== 'string') { return '' } let slug = str .trim() .replace(/[A-Z]+/g, lower) .replace(/<[^>\d]+>/g, '') .replace(re, '') .replace(/\s/g, '-') .replace(/-+/g, '-') .replace(/^(\d)/, '_$1') let count = cache[slug] count = hasOwn.call(cache, slug) ? count + 1 : 0 cache[slug] = count if (count) { slug = slug + '-' + count } return slug } slugify.clear = function () { cache = {} }