我已准备好从标题创建 slugs 的一切,但有一个问题。我的正则表达式用连字符替换空格。但是,当用户输入“Hi there”(多个空格)时,slug 最终会显示为“Hi-----there”。当真的应该是“Hi-there”时。
我是否应该创建正则表达式,以便它仅在两侧都有字符时替换空格?
或者有更简单的方法吗?
我用这个:
yourslug.replace(/\W+/g, '-')
这会将所有出现的一个或多个非字母数字字符替换为一个破折号。
只需匹配多个空白字符。
s/\s+/-/g
丹尼尔的回答是正确的。
但是,如果有人正在寻找完整的解决方案,我喜欢这个功能,
http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/
感谢“dense13”!
将重复的
-
折叠成一个 -
作为最后一步可能是最简单的:
replace /-{2,}/ by "-"
或者,如果您只想影响空格,请改为折叠空格(显然,在其他步骤之前)
我会将
[\s]+
替换为 '-'
,然后 然后 将 [^\w-]
替换为 ''
您可能需要先修剪字符串,以避免出现前导和尾随连字符。
function hyphenSpace(s){
s= (s.trim)? s.trim(): s.replace(/^\s+|\s+$/g,'');
return s.split(/\s+/).join('-');
}
您可以通过使用简单的包
@smflow/seo-slug
轻松地从标题或任何文本生成slug:Github
npm install @smflow/seo-slug
import { genSlug } from "@smflow/seo-slug";
const slug = genSlug("This is a blog title to generate slug");
console.log(slug); // this-is-a-blog-title-to-generate-slug1234