Замените пробелы тире и сделайте все буквы строчными


247

Мне нужно переформатировать строку, используя jQuery или ванильный JavaScript

Допустим, у нас есть "Sonic Free Games".

Я хочу преобразовать это в "sonic-free-games".

Таким образом, пробелы должны быть заменены тире, а все буквы преобразованы в маленькие буквы.

Любая помощь в этом, пожалуйста?

Ответы:


550

Просто используйте String replaceи toLowerCaseметоды, например:

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

Обратите внимание на gфлаг RegExp, он выполнит глобальную замену в строке, если он не используется, будет заменено только первое вхождение, а также, что RegExpбудет соответствовать одному или нескольким символам пробела.


52
Вариант, который я придумал, использует \ W, который представляет любой не буквенно-цифровой символ. Это полезно для чего-то вроде «A & P Grocery», которое станет «ap-бакалейной». str.replace(/\W+/g, '-').toLowerCase();
Адам Васельнюк

1
Не цитируйте часть регулярного выражения, то есть replace(/\s+/g, ..и нет replace('/\s+/f', .. (без апострофов)
Аттила Фулоп

Что если я хочу удалить пробелы в начале и конце строки?
Ромель Индемн

@RomelIndemne В настоящее время вы можете использовать String.prototype.trimметод:str.trim().replace(/\s+/g, '-').toLowerCase()
CMS

Спасибо, хороший. Теперь мне нужно наоборот XD JK
lawphotog

35

Приведенный выше ответ можно считать немного запутанным. Строковые методы не изменяют исходный объект. Они возвращают новый объект. Это должно быть:

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

10
Я думаю, что важно отметить, что принятый ответ был отредактирован, чтобы включить эту концепцию
Dexygen

31

Вы также можете использовать splitи join:

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

Помните о дополнительных случаях, например, когда в начале есть место, они не будут заменены
Bonjour123

1

@ CMS отвечает просто отлично, но я хочу отметить, что вы можете использовать этот пакет: https://github.com/sindresorhus/slugify , который делает это для вас и охватывает множество крайних случаев (например, немецкие умлауты, вьетнамский, арабский) , Русский, румынский, турецкий и др.).


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.