Ganti beberapa spasi putih dengan spasi putih tunggal dalam string JavaScript


191

Saya memiliki string dengan spasi putih tambahan, setiap kali ada lebih dari satu spasi putih yang saya inginkan hanya satu.

Siapa saja? Saya mencoba mencari google, tetapi tidak ada yang berhasil untuk saya.

Terima kasih


2
menghapus duplikat spasi putih dari akhir / awal, atau di mana saja dalam teks?
ninjagecko

Jawaban:


371

Sesuatu seperti ini:

var s = "  a  b     c  ";

console.log(
  s.replace(/\s+/g, ' ')
)


31
@ Me Silakan baca pertanyaan dengan seksama: "setiap kali ada lebih dari satu spasi putih Saya ingin hanya satu".
bjornd

5
Bukankah sudah jelas? itu menggantikan lebih dari 1 char spasi putih dengan 1 char spasi putih. (hasil yang diinginkan)
Perang

4
@CiaranG Ini adalah expresi reguler
pomeroy

1
@Wardy, tutup :-). Ini menggantikan satu ATAU lebih dengan satu ruang (tetapi memang, hasil yang diinginkan).
Greenoldman

1
Bagaimana jika seseorang ingin mengganti 1+ spasi putih dengan spasi yang sama? (mis. 2+ spasi dengan spasi dan 3 baris baru dengan baris baru, dll.) jika ada baris dan spasi baru maka harus diganti oleh baris baru sedangkan jika ada spasi dan tab maka harus diganti dengan luar angkasa
Tom

61

Anda dapat menambah String untuk menerapkan perilaku ini sebagai metode, seperti pada:

String.prototype.killWhiteSpace = function() {
    return this.replace(/\s/g, '');
};

String.prototype.reduceWhiteSpace = function() {
    return this.replace(/\s+/g, ' ');
};

Ini sekarang memungkinkan Anda untuk menggunakan formulir elegan berikut untuk menghasilkan string yang Anda inginkan:

"Get rid of my whitespaces.".killWhiteSpace();
"Get rid of my extra        whitespaces".reduceWhiteSpace();

14
Menambah prototipe objek standar adalah pola yang sangat kontroversial. Saya tidak akan merekomendasikan hal ini untuk pertanyaan mendasar.
bjornd

@XavierJohn Ini String, dengan R, bukan Sting.
LasagnaAndroid

20

menggunakan ekspresi reguler dengan fungsi ganti berfungsi:

string.replace(/\s/g, "")

Solusi ini salah per pertanyaan. Dan saya benar-benar bertanya-tanya mengapa Anda mempostingnya dua hari setelah solusi yang lebih baik telah diposting ...
Sebastian Mach

Saya pikir pada saat itu, hanya kode ini yang bekerja untuk saya. Saya tidak bisa kembali untuk mengonfirmasi. Saya jelas akan mencoba solusi terbaik dulu. Selain itu, setelah memeriksanya di konsol chrome, kedua solusi tampaknya berhasil. Namun yang menarik, ketika saya menyalin hasilnya ke kotak komentar ini, itu menunjukkan bahwa solusi saya tidak bekerja untuk banyak spasi putih. Mungkin Anda bisa membantu saya memahami alasannya. Saya kira itu adalah kesalahan chrome? Coba jalankan kode saya di konsol chrome dan beri tahu saya.
Roger Gajraj

13

Berikut solusi non-regex (hanya untuk bersenang-senang):

var s = ' a   b   word word. word, wordword word   ';

// with ES5:
s = s.split(' ').filter(function(n){ return n != '' }).join(' ');
console.log(s); // "a b word word. word, wordword word"

// or ES6:
s = s.split(' ').filter(n => n).join(' '); 
console.log(s); // "a b word word. word, wordword word"

Ini membagi string dengan spasi putih , menghapusnya semua item array kosong dari array (yang lebih dari satu spasi), dan menggabungkan semua kata lagi menjadi string, dengan spasi putih tunggal di antara mereka.


12

Saya kira Anda mencari untuk menghapus spasi dari awal dan / atau akhir string (daripada menghapus semua spasi?

Jika itu masalahnya, Anda memerlukan regex seperti ini:

mystring = mystring.replace(/(^\s+|\s+$)/g,' ');

Ini akan menghapus semua spasi dari awal atau akhir string. Jika Anda hanya ingin memotong spasi dari akhir, maka regex akan terlihat seperti ini sebagai gantinya:

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

Semoga itu bisa membantu.


4
Saya suka kesederhanaan regex Anda, @Spudley, tetapi tidakkah kode Anda menggantikan ruang kosong di awal dan berakhir dengan satu karakter spasi? Saya pikir tujuannya adalah untuk menghapus spasi putih dari ujung sepenuhnya, dalam hal ini string pengganti seharusnya ''bukan ' '.
Randall Cook


6

Saya tahu saya tidak boleh necromancy pada suatu subjek, tetapi mengingat rincian pertanyaannya, saya biasanya mengembangkannya menjadi:

  • Saya ingin mengganti beberapa kejadian spasi putih di dalam string dengan satu spasi
  • ... dan ... Saya tidak ingin spasi putih di awal atau akhir dari string (trim)

Untuk ini, saya menggunakan kode seperti ini (tanda kurung pada regexp pertama ada hanya untuk membuat kode sedikit lebih mudah dibaca ... regexps bisa menyebalkan kecuali Anda terbiasa dengan mereka):

s = s.replace(/^(\s*)|(\s*)$/g, '').replace(/\s+/g, ' ');

Alasan ini berfungsi adalah bahwa metode pada String-objek mengembalikan objek string di mana Anda dapat memanggil metode lain (seperti jQuery & beberapa perpustakaan lain). Cara yang jauh lebih ringkas untuk kode jika Anda ingin menjalankan beberapa metode pada satu objek secara berturut-turut.


+1 untuk contoh "siap pakai" .. Saya akan mempostingnya sendiri
d.raev

Persis apa yang saya cari, luar biasa!
robertp

4

var x = "Tes Tes Tes" .split ("") .join (""); waspada (x);


5
Ia bekerja tetapi ini bukan pengkodean yang cerdas. Kode ini lebih lambat dari RegEx. Saya ingin tahu apakah Split () tidak menggunakan RegEx untuk membagi string!
Farandole

2

Coba ini.

var string = "         string             1";
string = string.trim().replace(/\s+/g, ' ');

hasilnya akan

string 1

Apa yang terjadi di sini adalah bahwa ia akan memangkas ruang luar menggunakan terlebih dahulu trim()kemudian memangkas menggunakan ruang dalam .replace(/\s+/g, ' ').


0

Jika Anda ingin membatasi pengguna untuk memberikan ruang kosong pada nama, buat saja pernyataan if dan berikan kondisinya. seperti yang saya lakukan:

$j('#fragment_key').bind({
    keypress: function(e){
        var key = e.keyCode;
    var character = String.fromCharCode(key); 
    if(character.match( /[' ']/)) {
        alert("Blank space is not allowed in the Name");
        return false;
        }
    }
});
  • buat fungsi JQuery.
  • ini adalah acara pers kunci.
  • Inisialisasi variabel.
  • Berikan kondisi untuk mencocokkan karakter
  • tampilkan pesan peringatan untuk kondisi Anda yang cocok.

0

Bagaimana dengan yang ini?

"my test string \t\t with crazy stuff is cool ".replace(/\s{2,9999}|\t/g, ' ')

output "my test string with crazy stuff is cool "

Yang ini juga menghilangkan semua tab


Tab sudah tercakup oleh \s. Regex yang tidak perlu kompleks, mungkin juga hanya menulis /\s+/g.
Anders Rabo Thorbeck
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.