从标题创建 Slug?

问题描述 投票:0回答:7

我已准备好从标题创建 slugs 的一切,但有一个问题。我的正则表达式用连字符替换空格。但是,当用户输入“Hi    there”(多个空格)时,slug 最终会显示为“Hi-----there”。当真的应该是“Hi-there”时。

我是否应该创建正则表达式,以便它仅在两侧都有字符时替换空格?

或者有更简单的方法吗?

javascript regex slug
7个回答
16
投票

我用这个:

yourslug.replace(/\W+/g, '-')

这会将所有出现的一个或多个非字母数字字符替换为一个破折号。


5
投票

只需匹配多个空白字符。

s/\s+/-/g

3
投票

丹尼尔的回答是正确的。

但是,如果有人正在寻找完整的解决方案,我喜欢这个功能,

http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/

感谢“dense13”!


2
投票

将重复的

-
折叠成一个
-
作为最后一步可能是最简单的:

replace /-{2,}/ by "-"

或者,如果您只想影响空格,请改为折叠空格(显然,在其他步骤之前)


0
投票

我会将

[\s]+
替换为
'-'
,然后 然后
[^\w-]
替换为
''


0
投票

您可能需要先修剪字符串,以避免出现前导和尾随连字符。

function hyphenSpace(s){
    s= (s.trim)? s.trim(): s.replace(/^\s+|\s+$/g,'');
    return s.split(/\s+/).join('-');
}

0
投票

您可以通过使用简单的包

@smflow/seo-slug
轻松地从标题或任何文本生成slug:Github

如何生成

安装包:@smflow/seo-slug

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

© www.soinside.com 2019 - 2024. All rights reserved.