SEO slug 正则清洗
场景
真实项目里经常要把文章标题、商品标题或页面标题转成 URL 里的 slug,需要保证结果短、稳定、可读,并且不会带奇怪符号。
代码
function normalizeSeoSlug(value: string): string {
return value
.trim()
.toLowerCase()
.replace(/[`'"“”‘’]/g, '')
.replace(/&/g, ' and ')
.replace(/[^a-z0-9\s-]/g, ' ')
.replace(/\s+/g, ' ')
.split(/[\s-]+/)
.filter(Boolean)
.slice(0, 5)
.join('-')
.replace(/-+/g, '-')
.replace(/^-|-$/g, '');
}记一下
这类正则不要一次写成一个巨大的表达式,真实项目里更适合拆成一条清洗流水线:
/['"“”‘’]/g`:去掉中英文引号,避免标题里的 quote 变成无意义字符。/&/g:把&转成and,比直接删掉更可读。/[^a-z0-9\s-]/g:只保留英文小写、数字、空白和短横线,其他符号先变成空格。/\s+/g:把连续空白压成一个空格,避免后面 split 出空 token。/[\s-]+/:按空白或短横线切词,兼容原始标题里已经带-的情况。/-+/g:兜底合并连续短横线。/^-|-$/g:去掉首尾短横线,避免生成/foo-/或/-foo/。
关键点是顺序:先清洗符号,再切词限长,最后统一 join 和兜底 trim。这样每一步都能解释,也方便以后按业务规则调整。