用破折号代替空格,并使所有字母变为小写


247

我需要使用jQuery或香草JavaScript重新格式化字符串

假设我们有"Sonic Free Games"

我想将其转换为"sonic-free-games"

因此,应将空格替换为破折号,并将所有字母转换为小写字母。

请问有什么帮助吗?

Answers:


549

只需使用String replacetoLowerCase方法,例如:

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase();
console.log(str); // "sonic-free-games"

请注意,g上的标志RegExp,它将在字符串中全局进行替换,如果不使用它,则将仅替换第一个匹配项,并且RegExp将匹配一个或多个空格字符。


52
我想出的一个变体使用\ W表示任何非字母数字字符。这对于像“ A&P杂货店”这样会变成“ ap杂货店”的东西很有用。str.replace(/\W+/g, '-').toLowerCase();
Adam Waselnuk

1
不介意引述的regexp部分,即replace(/\s+/g, .. replace('/\s+/f', ..(不撇号)
阿提拉弗洛普

如果要删除字符串开头和结尾的空格怎么办?
罗默·英登

@RomelIndemne现在,您可以使用以下String.prototype.trim方法:str.trim().replace(/\s+/g, '-').toLowerCase()
CMS

谢谢,很好。现在,我需要绕开xD JK的另一种方法
lawphotog,

34

以上答案可以认为有点令人困惑。字符串方法不修改原始对象。他们返回新对象。肯定是:

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase(); //new object assigned to var str

10
我认为重要的是要注意,已接受的答案已经过编辑以纳入此概念
Dexygen 2015年

31

您还可以使用splitjoin

"Sonic Free Games".split(" ").join("-").toLowerCase(); //sonic-free-games

请注意附带的情况,例如在开始时会有一些空间,它们将不会被替换
Bonjour123

1

@CMS的答案很好,但我想指出的是,您可以使用此软件包:https : //github.com/sindresorhus/slugify,它可以为您解决这个问题,并涵盖了许多极端情况(例如,德国变音符号,越南语,阿拉伯语) ,俄语,罗马尼亚语,土耳其语等)。


0

var str = "Tatwerat Development Team";
str = str.replace(/\s+/g, '-');
console.log(str);
console.log(str.toLowerCase())

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.