Замініть пробіли на тире та зробіть усі літери маленькими літерами


247

Мені потрібно переформатувати рядок за допомогою jQuery або vanilla JavaScript

Скажімо, маємо "Sonic Free Games".

Я хочу його перетворити "sonic-free-games".

Тож пробіли слід замінити тире та всі літери, перетворені на малі літери.

Будь-яка допомога з цього приводу?

Відповіді:


549

Просто використовуйте 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", який став би "ап-бакалією". 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

34

Вище відповідь можна вважати трохи заплутаною. Методи рядків не змінюють оригінальний об'єкт. Вони повертають новий об’єкт. Це повинно бути:

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.