Làm cách nào để xóa khoảng trắng khỏi chuỗi bằng JavaScript?


552

Làm thế nào để loại bỏ khoảng trắng trong một chuỗi? Ví dụ:

Đầu vào:

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

Đầu ra:

'/var/www/site/Brandnewdocument.docx'

giải pháp của tôi" ahm ed ".split('').filter(e => e.trim().length).join('')
UA_

Câu trả lời:


1224

Điều này?

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

Thí dụ

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

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


Cập nhật: Dựa trên câu hỏi này, đây:

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

là một giải pháp tốt hơn. Nó tạo ra kết quả tương tự, nhưng nó làm nó nhanh hơn.

Chính quy

\slà biểu thức chính cho "khoảng trắng" và glà cờ "toàn cầu", nghĩa là khớp với TẤT CẢ \s(khoảng trắng).

Một lời giải thích tuyệt vời cho +có thể được tìm thấy ở đây .

Là một lưu ý phụ, bạn có thể thay thế nội dung giữa các trích dẫn đơn lẻ thành bất cứ điều gì bạn muốn, vì vậy bạn có thể thay thế khoảng trắng bằng bất kỳ chuỗi nào khác.


@Gaurav Tôi đã tìm kiếm câu trả lời tương tự trên SO, và tôi thấy .replace(/\s+/g, '')thường xuyên hơn. Có sự khác biệt giữa điều đó và câu trả lời của tôi?
Vidime Vidas

trong trường hợp này không có sự khác biệt Nhưng + được sử dụng để tìm kiếm với ít nhất một lần xuất hiện.
Gaurav

1
Ngớ ngẩn với tôi, tôi đã có ấn tượng rằng .replace(' ','')sẽ làm việc. Nhiều đánh giá cao!
Andy Mercer

3
câu trả lời ban đầu liên quan (mà Sime liên kết đến trong bản chỉnh sửa của anh ta) +chỉ có 60 phiếu nếu ai đó muốn ghi nhận anh ta / cô ta quá stackoverflow.com/a/5964427/4258817
Mousey

2
Hãy cẩn thận để không vô tình trích dẫn regex của bạn, ví dụ như .replace('/\s+/g', '')vì nó sẽ cố gắng tìm chuỗi ký tự đó. Điều này làm tôi vấp ngã trước khi ...
RTF

75

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

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

Hai cách để làm điều này!


4
Tôi thích sự phân chia () và tham gia ().
Eric Milliot-Martinez

2
tách ('') và tham gia sẽ không xóa \ n, \ t ký tự khoảng trắng, một cách giải quyết khác là a.split (''). map (c => c.trim ()). tham gia ('')
rab

36

NGẮN HẠN và NHANH NHẤT :str.replace(/ /g, '');


Điểm chuẩn:

Đây là kết quả của tôi - (2018.07.13) MacOs High Sierra 10.13.3 trên Chrome 67.0.3394 (64-bit), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64-bit)):

Chuỗi NGẮN

Chuỗi ngắn tương tự như ví dụ từ câu hỏi OP

nhập mô tả hình ảnh ở đây

Giải pháp nhanh nhất trên tất cả các trình duyệt là / /g(regrec1a) - Chrome 17.7M (hoạt động / giây), Safari 10.1M, Firefox 8.8M. Chậm nhất cho tất cả các trình duyệt là split-joingiải pháp. Thay đổi để \shoặc thêm +hoặc iđể RegExp làm chậm xuống xử lý.

Chuỗi dài

Đối với chuỗi khoảng ~ 3 triệu kết quả ký tự là:

  • regapi1a : Safari 50,14 ops / giây, Firefox 18,57, Chrome 8,95
  • regrec2b : Safari 38,39, Firefox 19,45, Chrome 9,26
  • chia nhỏ : Firefox 26.41, Safari 23.10, Chrome 7,98,

Bạn có thể chạy nó trên máy của mình: https://jsperf.com/remove-opes-spaces/1


1
Thật thú vị, phương thức chia tách bây giờ là nhanh nhất đối với tôi trên Firefox 73, theo sau là regrec1a với tốc độ chậm hơn 53%.
hackel

25

Theo câu trả lời @rsplak: thực sự, sử dụng cách chia / nối nhanh hơn so với sử dụng regrec. Xem trường hợp kiểm tra hiệu suất

Vì thế

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

hoạt động nhanh hơn

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

Trên các văn bản nhỏ, điều này không liên quan, nhưng đối với các trường hợp khi thời gian là quan trọng, ví dụ như trong các trình phân tích văn bản, đặc biệt là khi tương tác với người dùng, điều đó rất quan trọng.


Mặt khác, \s+xử lý nhiều nhân vật không gian hơn. Trong số với \n\t, nó cũng phù hợp với \u00a0nhân vật, và đó là những gì  được lại, khi nhận được văn bản sử dụng textDomNode.nodeValue.

Vì vậy, tôi nghĩ rằng kết luận ở đây có thể được đưa ra như sau: nếu bạn chỉ cần thay thế khoảng trắng ' ' , hãy sử dụng chia / nối. Nếu có thể có các biểu tượng khác nhau của lớp biểu tượng - sử dụngreplace(/\s+/g, '')


1
nó rất nhiều không way faster . đã chạy thử nghiệm và nó chỉ nhanh hơn 2,19%, trên Firefox 61 của tôi
vsync


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

Lưu ý: Mặc dù bạn sử dụng 'g' hoặc 'gi' để xóa các khoảng trắng cả hai đều hoạt động giống nhau.

Nếu chúng ta sử dụng 'g' trong chức năng thay thế, nó sẽ kiểm tra sự trùng khớp chính xác. nhưng nếu chúng ta sử dụng 'gi', nó sẽ bỏ qua độ nhạy của vỏ.

để tham khảo bấm vào đây .


0

Regex + Thay thế ()

Mặc dù regex có thể chậm hơn, nhưng trong nhiều trường hợp sử dụng, nhà phát triển chỉ thao tác một vài chuỗi cùng một lúc nên việc xem xét tốc độ là không liên quan. Mặc dù / / nhanh hơn / \ s /, việc '\ s' giải thích những gì đang xảy ra với nhà phát triển khác có lẽ rõ ràng hơn.

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

Tách () + Tham gia ()

Sử dụng Split + Join cho phép thao tác chuỗi tiếp theo.

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";
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.