Thay thế nhiều khoảng trắng bằng khoảng trắng đơn trong chuỗi JavaScript


191

Tôi có các chuỗi có thêm khoảng trắng, mỗi lần có nhiều hơn một khoảng trắng tôi muốn nó chỉ là một.

Bất kỳ ai? Tôi đã thử tìm kiếm google, nhưng không có gì làm việc cho tôi.

Cảm ơn


2
xóa khoảng trắng trùng lặp từ cuối / đầu hoặc bất cứ nơi nào trong văn bản?
ninjagecko

Câu trả lời:


371

Một cái gì đó như thế này:

var s = "  a  b     c  ";

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


31
@Me Vui lòng đọc kỹ câu hỏi: "mỗi lần có nhiều hơn một khoảng trắng tôi muốn nó chỉ là một".
bjornd

5
Nó không rõ ràng sao? nó thay thế hơn 1 char khoảng trắng bằng 1 char khoảng trắng. (kết quả mong muốn)
Chiến tranh

4
@CiaranG Đó là một biểu hiện thường xuyên
pomeroy

1
@Wardy, đóng :-). Nó thay thế một HOẶC nhiều hơn bằng một khoảng trắng (nhưng thực tế, kết quả mong muốn).
greenoldman

1
Điều gì sẽ xảy ra nếu một người muốn thay thế 1+ khoảng trắng bằng cùng một khoảng trắng? (vd không gian
Tom

61

Bạn có thể gia tăng Chuỗi để thực hiện các hành vi này dưới dạng phương thức, như trong:

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

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

Điều này bây giờ cho phép bạn sử dụng các hình thức thanh lịch sau đây để tạo ra chuỗi bạn muốn:

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

14
Nguyên mẫu tăng cường của đối tượng tiêu chuẩn là một mô hình thực sự gây tranh cãi. Tôi sẽ không đề nghị nó cho một câu hỏi cơ bản như vậy.
bjornd

@XavierJohn Đó là Chuỗi, với R, không phải Sting.
LasagnaAndroid

20

sử dụng biểu thức chính quy với hàm thay thế sẽ thực hiện thủ thuật:

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

Giải pháp này là sai cho mỗi câu hỏi. Và tôi thực sự tự hỏi tại sao bạn lại đăng nó hai ngày sau khi một giải pháp tốt hơn đã được đăng ...
Sebastian Mach

Tôi nghĩ tại thời điểm đó, chỉ có mã này làm việc cho tôi. Tôi không thể quay lại để xác nhận. Tôi rõ ràng đã thử giải pháp tốt nhất đầu tiên. Ngoài ra, khi kiểm tra nó trong giao diện điều khiển chrome, cả hai giải pháp dường như hoạt động. Tuy nhiên, điều thú vị là khi tôi sao chép kết quả vào hộp bình luận này, nó cho thấy giải pháp của tôi không hoạt động đối với nhiều khoảng trắng. Có lẽ bạn có thể giúp tôi hiểu tại sao. Tôi đoán đó là một lỗi chrome? Hãy thử chạy mã của tôi trong bảng điều khiển chrome và cho tôi biết.
Roger Gajraj

13

Đây là một giải pháp không phải regex (chỉ để giải trí):

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"

Nó phân tách chuỗi bằng khoảng trắng , loại bỏ tất cả các mục mảng trống khỏi mảng (các mục không chỉ là một khoảng trắng) và nối tất cả các từ lại thành một chuỗi, với một khoảng trắng ở giữa chúng.


12

Tôi đoán bạn đang tìm cách tước khoảng trắng từ đầu và / hoặc cuối chuỗi (thay vì xóa tất cả khoảng trắng?

Nếu đó là trường hợp, bạn sẽ cần một regex như thế này:

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

Điều này sẽ loại bỏ tất cả các khoảng trắng từ đầu hoặc cuối chuỗi. Nếu bạn chỉ muốn cắt khoảng trắng từ cuối, thì regex sẽ trông như thế này:

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

Mong rằng sẽ giúp.


4
Tôi thích sự đơn giản của regex của bạn, @Spudley, nhưng mã của bạn sẽ không thay thế các khoảng trắng ở đầu và cuối bằng một ký tự khoảng trắng? Tôi nghĩ mục tiêu là loại bỏ hoàn toàn khoảng trắng khỏi các đầu cuối, trong trường hợp đó nên thay thế chuỗi ''thay thế ' '.
Randall Cook

8

jQuery.trim () hoạt động tốt.

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


14
Chỉ cần nhớ rằng điều này không loại bỏ tất cả khoảng trắng. Trích dẫn các tài liệu: "Xóa khoảng trắng từ đầu và cuối chuỗi ."
Jonik

6

Tôi biết tôi không nên quan tâm đến một chủ đề, nhưng được cung cấp các chi tiết của câu hỏi, tôi thường mở rộng nó thành:

  • Tôi muốn thay thế nhiều lần xuất hiện của khoảng trắng bên trong chuỗi bằng một khoảng trắng
  • ... và ... Tôi không muốn khoảng trắng ở đầu hoặc cuối chuỗi (trim)

Đối với điều này, tôi sử dụng mã như thế này (dấu ngoặc đơn trên regrec đầu tiên chỉ có để làm cho mã dễ đọc hơn một chút ... regexps có thể là một nỗi đau trừ khi bạn quen thuộc với chúng):

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

Lý do điều này hoạt động là các phương thức trên đối tượng Chuỗi trả về một đối tượng chuỗi mà bạn có thể gọi một phương thức khác (giống như jQuery và một số thư viện khác). Cách mã hóa nhỏ gọn hơn nhiều nếu bạn muốn thực thi nhiều phương thức trên một đối tượng liên tiếp.


+1 cho ví dụ "sẵn sàng để sử dụng" .. Tôi sẽ tự đăng nó
d.raev

Chính xác những gì tôi đang tìm kiếm, tuyệt vời!
robertp

4

var x = "Kiểm tra thử nghiệm kiểm tra" .split ("") .join (""); cảnh báo (x);


5
Nó hoạt động nhưng nó không phải là mã hóa thông minh. Mã này chậm hơn RegEx. Tôi tự hỏi nếu Split () không sử dụng RegEx để phân tách một chuỗi!
Farandole

2

Thử cái này.

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

kết quả sẽ là

string 1

Điều đã xảy ra ở đây là nó sẽ cắt các không gian bên ngoài trước bằng cách sử dụng trim()sau đó cắt các không gian bên trong bằng cách sử dụng .replace(/\s+/g, ' ').


0

Nếu bạn muốn hạn chế người dùng cung cấp khoảng trắng trong tên, chỉ cần tạo một câu lệnh if và đưa ra điều kiện. như tôi đã làm:

$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;
        }
    }
});
  • tạo một hàm JQuery.
  • đây là sự kiện báo chí quan trọng
  • Khởi tạo một biến.
  • Đưa ra điều kiện để phù hợp với nhân vật
  • hiển thị một thông báo cảnh báo cho tình trạng phù hợp của bạn.

0

Cái này thì sao?

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

đầu ra "my test string with crazy stuff is cool "

Điều này cũng được loại bỏ bất kỳ tab nào


Các tab đã được bao phủ bởi \s. Regex phức tạp không cần thiết, cũng có thể chỉ cần viết /\s+/g.
Anders Rabo Thorbeck
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.