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

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будет соответствовать одному или нескольким символам пробела.

CMS
источник
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 , который делает это для вас и охватывает множество крайних случаев (например, немецкие умлауты, вьетнамский, арабский) , Русский, румынский, турецкий и др.).

Matias
источник
0

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

Абдо-Host
источник