Thay thế khoảng trắng bằng dấu gạch dưới trong JavaScript?


353

Tôi đang cố gắng sử dụng mã này để thay thế khoảng trắng bằng _, nó hoạt động cho không gian đầu tiên trong chuỗi nhưng tất cả các trường hợp không gian khác vẫn không thay đổi. Có ai biết tại sao không?

function updateKey()
{
    var key=$("#title").val();
    key=key.replace(" ","_");
    $("#url_key").val(key);
}

Câu trả lời:


694

Thử .replace(/ /g,"_");

Chỉnh sửa : hoặc .split(' ').join('_')nếu bạn có ác cảm với REs

Chỉnh sửa : John Resig nói :

Nếu bạn đang tìm kiếm và thay thế thông qua một chuỗi bằng tìm kiếm tĩnh và thay thế tĩnh, thì thực hiện hành động nhanh hơn với .split ("khớp"). Tham gia ("thay thế") - có vẻ phản trực giác nhưng nó quản lý để hoạt động theo cách đó trong hầu hết các trình duyệt hiện đại. (Có những thay đổi đang diễn ra để cải thiện hiệu năng của .replace (/ match / g, "thay thế") trong phiên bản tiếp theo của Firefox - vì vậy, tuyên bố trước đó sẽ không tồn tại lâu.)


1
Có cách nào để làm điều này mà không cần regrec?
Nhấp vào Upvote

14
.split ('') .join ('_')
Lưỡi liềm tươi

7
Thay vì / /gsử dụng /\ /g- cả hai đều hoạt động trong Javascript. Cái sau cũng hoạt động trong CoffeeScript.
Tom Leys

27
Năm 2015 .replace(/ /g,"_");nhanh hơn .split(' ').join('_').
Gabriel Tomitsuka

8
Những người trong tương lai duyệt @Inez này có một liên kết để kiểm tra cả hai tốc độ phân tách / tham gia VS. thay thế. Cuối năm 2018 thay thế nhanh hơn đáng kể.
ricks


58

Để trả lời câu hỏi của Prasanna dưới đây:

Làm thế nào để bạn thay thế nhiều không gian bằng không gian duy nhất trong Javascript?

Bạn sẽ sử dụng cùng một hàm replacevới một biểu thức chính quy khác. Biểu thức cho khoảng trắng là \svà biểu thức cho "1 lần trở lên" là +dấu cộng, vì vậy bạn chỉ cần thay câu trả lời của Adam bằng cách sau:

key=key.replace(/\s+/g,"_");

30

Bạn có thể thử cái này

 var str = 'hello     world  !!';
 str = str.replace(/\s+/g, '-');

Nó thậm chí sẽ thay thế nhiều khoảng trắng bằng một dấu '-'.


3
Có lẽ đáng chú ý: Điều này cũng tước bỏ các khoảng trắng khác.
Berry M.

18

Tôi đã tạo thử nghiệm hiệu năng JS cho nó http://jsperf.com/split-and-join-vs-replace2


1
có vẻ như ngày nay thay thế là sự lựa chọn tổng thể tốt hơn
Houman

Kave - cái gì? Mặc dù không phải tất cả các trình duyệt đều như nhau, nhưng trung bình chia / tham gia tốt hơn nhiều. Trên thực tế, trong rất nhiều trình duyệt hiện đại, đó là một giai điệu tốt hơn! Cảm ơn Inez đã thiết lập điều này!
David Hobs

4
Hơn một năm sau và chạy thử nghiệm trên Chrome 32.0.1700.107 .. str.replace () mang lại kết quả tốt hơn nhiều (nhanh hơn 64%)
jenovachild 12/214

12

Thay thế dấu cách bằng dấu gạch dưới

var str = 'How are you';
var replaced = str.split(' ').join('_');

Đầu ra: How_are_you


3

Tôi biết điều này đã cũ nhưng tôi không thấy ai đề cập đến việc mở rộng Chuỗi prototype.

String.prototype.replaceAll = function(search, replace){
    if(!search || !replace){return this;} //if search entry or replace entry empty return the string
    return this.replace(new RegExp('[' + search + ']', 'g'), replace); //global RegEx search for all instances ("g") of your search entry and replace them all.
};

1
Bạn đã không thấy ai làm điều đó vì đó là một ý tưởng tồi tệ. Kiểm tra câu hỏi SO khác này để biết thêm.

2

Chỉ cần sử dụng replace:

var text = 'Hello World';
    
new_text = text.replace(' ', '_');
    
console.log(new_text);


3
Điều này sẽ chỉ thay thế không gian đầu tiên không sau đó
Narendra
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.