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


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.