Bagaimana cara menghapus spasi dari string menggunakan JavaScript?

553

Bagaimana cara menghapus spasi dalam string? Contohnya:

Memasukkan:

'/var/www/site/Brand new document.docx'

Keluaran:

'/var/www/site/Brandnewdocument.docx'
JLuiz
sumber
solusi saya" ahm ed ".split('').filter(e => e.trim().length).join('')
UA_

Jawaban:

1225

Ini?

str = str.replace(/\s/g, '');

Contoh

var str = '/var/www/site/Brand new document.docx';

document.write( str.replace(/\s/g, '') );


Pembaruan: Berdasarkan pertanyaan ini, ini:

str = str.replace(/\s+/g, '');

adalah solusi yang lebih baik. Ini menghasilkan hasil yang sama, tetapi lebih cepat.

Regex

\sadalah regex untuk "spasi putih", dan gmerupakan bendera "global", yang berarti cocok dengan SEMUA \s(spasi putih).

Penjelasan yang bagus untuk +dapat ditemukan di sini .

Sebagai catatan tambahan, Anda dapat mengganti konten antara tanda kutip tunggal dengan apa pun yang Anda inginkan, sehingga Anda dapat mengganti spasi dengan string lain.

Šime Vidas
sumber
@ Gaurav Saya telah mencari jawaban yang sama pada SO, dan saya melihat .replace(/\s+/g, '')lebih sering. Apakah ada perbedaan antara itu dan jawaban saya?
Šime Vidas
dalam hal ini tidak ada perbedaan. Tetapi + digunakan untuk menemukan dengan setidaknya satu kejadian.
Gaurav
1
Konyol saya, saya mendapat kesan bahwa itu .replace(' ','')akan berhasil. Sangat dihargai!
Andy Mercer
3
jawaban asli yang melibatkan (yang ditautkan Sime dalam editnya) +hanya memiliki 60 suara jika ada yang ingin memberi kredit kepadanya terlalu stackoverflow.com/a/5964427/4258817
Mousey
2
Berhati-hatilah untuk tidak mengutip regex Anda secara tidak sengaja misalnya .replace('/\s+/g', '')karena akan mencoba menemukan string literal itu. Ini membuat saya tersandung sebelum ...
RTF
75

var a = b = " /var/www/site/Brand new   document.docx ";

console.log( a.split(' ').join('') );
console.log( b.replace( /\s/g, '') ); 

Dua cara untuk melakukan ini!

rsplak
sumber
4
Saya menyukai split () dan join ().
Eric Milliot-Martinez
2
pisah ('') dan bergabunglah tidak akan menghapus \ n, \ t spasi putih, solusi lain adalah a.split (''). map (c => c.trim ()). join ('')
rab
36

PENDEK dan TERCEPAT :str.replace(/ /g, '');


Benchmark:

Di sini hasil saya - (2018.07.13) MacOs High Sierra 10.13.3 di Chrome 67.0.3396 (64-bit), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64-bit)):

String pendek

String pendek mirip dengan contoh dari pertanyaan OP

masukkan deskripsi gambar di sini

Solusi tercepat di semua browser adalah / /g(regexp1a) - Chrome 17.7M (operasi / detik), Safari 10.1M, Firefox 8.8M. Yang paling lambat untuk semua browser adalah split-joinsolusi. Perubahan ke \satau menambahkan +atau iuntuk regexp memperlambat pengolahan.

String PANJANG

Untuk string sekitar ~ 3 juta hasil karakter adalah:

  • regexp1a : Safari 50,14 ops / dtk, Firefox 18.57, Chrome 8.95
  • regexp2b : Safari 38.39, Firefox 19.45, Chrome 9.26
  • split-join : Firefox 26.41, Safari 23.10, Chrome 7.98,

Anda dapat menjalankannya di mesin Anda: https://jsperf.com/remove-string-spaces/1

Kamil Kiełczewski
sumber
1
Menariknya, metode split-join sekarang menjadi yang tercepat bagi saya di Firefox 73, diikuti oleh regexp1a dengan kecepatan 53% lebih lambat.
retas
25

Mengikuti jawaban @rsplak: sebenarnya, menggunakan split / join way lebih cepat daripada menggunakan regexp. Lihat kasus uji kinerja

Begitu

var result = text.split(' ').join('')

beroperasi lebih cepat daripada

var result = text.replace(/\s+/g, '')

Pada teks-teks kecil ini tidak relevan, tetapi untuk kasus-kasus ketika waktu penting, misalnya dalam analis teks, terutama ketika berinteraksi dengan pengguna, itu penting.


Di sisi lain, \s+menangani variasi karakter ruang yang lebih luas. Di antara dengan \ndan \t, itu juga cocok dengan \u00a0karakter, dan itulah yang  diaktifkan, saat mendapatkan teks textDomNode.nodeValue.

Jadi saya pikir kesimpulan di sini dapat dibuat sebagai berikut: jika Anda hanya perlu mengganti spasi ' ' , gunakan split / gabung. Jika ada simbol kelas simbol yang berbeda - gunakanreplace(/\s+/g, '')

Minstel
sumber
1
sangat tidak way faster . menjalankan tes dan hanya 2,19% lebih cepat, di Firefox 61 saya.
vsync
8
var input = '/var/www/site/Brand new document.docx';

//remove space
input = input.replace(/\s/g, '');

//make string lower
input = input.toLowerCase();

alert(input);

Klik di sini untuk contoh kerja

Muhammad Tahir
sumber
2
  var output = '/var/www/site/Brand new document.docx'.replace(/ /g, ""); 
    or
  var output = '/var/www/site/Brand new document.docx'.replace(/ /gi,"");

Catatan: Meskipun Anda menggunakan 'g' atau 'gi' untuk menghapus spasi, keduanya berperilaku sama.

Jika kita menggunakan 'g' di fungsi ganti, itu akan memeriksa kecocokan yang tepat. tetapi jika kita menggunakan 'gi', ia mengabaikan sensitivitas case.

untuk referensi klik di sini .

Raveendra007
sumber
0

Regex + Ganti ()

Meskipun regex bisa lebih lambat, dalam banyak kasus pengembang hanya memanipulasi beberapa string sekaligus sehingga mempertimbangkan kecepatan tidak relevan. Meskipun / / lebih cepat dari / \ s /, memiliki 's' menjelaskan apa yang sedang terjadi ke pengembang lain mungkin lebih jelas.

let string = '/var/www/site/Brand new document.docx';
let path = string.replace(/\s/g, '');
// path => '/var/www/site/Brandnewdocument.docx'

Split () + Gabung ()

Menggunakan Split + Join memungkinkan untuk manipulasi dirantai lebih lanjut dari string.

let string = '/var/www/site/Brand new document.docx';
let path => string.split('').map(char => /(\s|\.)/.test(char) ? '/' : char).join('');
// "/var/www/site/Brand/new/document/docx";
SoEzPz
sumber