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

malam
sumber
2
menghapus duplikat spasi putih dari akhir / awal, atau di mana saja dalam teks?
ninjagecko
Kemungkinan duplikat dari Regex untuk menggantikan beberapa ruang dengan satu ruang
Muhammad Omar ElShourbagy

Jawaban:

371

Sesuatu seperti ini:

var s = "  a  b     c  ";

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

bjornd
sumber
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();
gui pn
sumber
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, "")
Roger Gajraj
sumber
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.

vsync
sumber
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.

Spudley
sumber
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
8

jQuery.trim () berfungsi dengan baik.

http://api.jquery.com/jQuery.trim/

chug2k
sumber
14
Ingatlah bahwa ini tidak menghapus semua spasi putih. Mengutip dokumen: "Hapus spasi dari awal dan akhir sebuah string ."
Jonik
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.

Markku Uttula
sumber
+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);

Praveen Kumar Thalluri
sumber
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, ' ').

Richard Vergis
sumber
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.
Abhijit BIswas
sumber
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

pengguna3413723
sumber
Tab sudah tercakup oleh \s. Regex yang tidak perlu kompleks, mungkin juga hanya menulis /\s+/g.
Anders Rabo Thorbeck