Ganti spasi dengan tanda hubung dan buat huruf kecil semua huruf

247

Saya perlu memformat ulang string menggunakan jQuery atau JavaScript vanilla

Katakanlah kita punya "Sonic Free Games".

Saya ingin mengubahnya menjadi "sonic-free-games".

Jadi spasi putih harus diganti dengan tanda hubung dan semua huruf dikonversi menjadi huruf kecil.

Tolong ada bantuan untuk ini?

SAYA
sumber

Jawaban:

549

Cukup gunakan String replacedan toLowerCasemetode, misalnya:

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

Perhatikan gbendera pada RegExp, itu akan membuat penggantian global dalam string, jika tidak digunakan, hanya kejadian pertama yang akan diganti, dan juga, yang RegExpakan cocok dengan satu atau lebih karakter spasi putih.

CMS
sumber
52
Variasi yang saya buat dengan menggunakan \ W yang mewakili karakter nonalphanumeric. Ini berguna untuk sesuatu seperti 'A&P Grocery' yang akan menjadi 'ap-grocery'. str.replace(/\W+/g, '-').toLowerCase();
Adam Waselnuk
1
Pikiran tidak mengutip bagian regexp, yaitu replace(/\s+/g, ..dan tidak replace('/\s+/f', .. (tanpa tanda kutip)
Attila Fulop
Bagaimana jika saya ingin menghapus spasi di awal dan akhir string?
Romel Indemne
@RomelIndemne Saat ini Anda dapat menggunakan String.prototype.trimmetode ini:str.trim().replace(/\s+/g, '-').toLowerCase()
CMS
Terima kasih, bagus. Sekarang saya perlu sebaliknya xD JK
lawphotog
34

Jawaban di atas bisa dianggap sedikit membingungkan. Metode string tidak mengubah objek asli. Mereka mengembalikan objek baru. Itu harus:

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase(); //new object assigned to var str
yurin
sumber
10
Saya pikir penting untuk dicatat bahwa jawaban yang diterima telah diedit untuk memasukkan konsep ini
Dexygen
31

Anda juga dapat menggunakan splitdan join:

"Sonic Free Games".split(" ").join("-").toLowerCase(); //sonic-free-games
Eesa
sumber
Waspadai kasus-kasus sampingan, misalnya di mana ada ruang di awal, mereka tidak akan diganti
Bonjour123
1

@ Jawaban CMS baik-baik saja, tetapi saya ingin mencatat bahwa Anda dapat menggunakan paket ini: https://github.com/sindresorhus/slugify , yang melakukannya untuk Anda dan mencakup banyak kasus tepi (yaitu, umlaut Jerman, Vietnam, Arab) , Rusia, Rumania, Turki, dll.)

Matias
sumber
0

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

Tuan Rumah
sumber