2012-10-22 63 views
23

Tôi muốn xóa tất cả các ký tự đặc biệt và dấu cách khỏi chuỗi và thay thế bằng dấu gạch dưới. Chuỗi làxóa ký hiệu đặc biệt và dấu cách thừa và thay bằng dấu gạch dưới bằng cách thay thế phương thức

var str = "hello world & hello universe"; 

Tôi có này ngay bây giờ thay thế chỉ không gian

 str.replace(/\s/g, "_"); 

Kết quả tôi nhận được là hello_world_&_hello_universe, nhưng tôi muốn để loại bỏ các biểu tượng đặc biệt là tốt.

Tôi đã thử điều này str.replace(/[^a-zA-Z0-9]\s/g, "_") nhưng điều này không hữu ích.

Trả lời

50

Cụm từ thông dụng của bạn [^a-zA-Z0-9]\s/g cho biết khớp với bất kỳ ký tự nào không phải là số hoặc chữ cái theo sau là dấu cách.

Xóa \ s và bạn sẽ nhận được những gì bạn đang có nếu bạn muốn có _ cho mỗi ký tự đặc biệt.

var newString = str.replace(/[^A-Z0-9]/ig, "_"); 

Điều đó sẽ dẫn đến hello_world___hello_universe

Nếu bạn muốn nó được dấu gạch đơn sử dụng a + để phù hợp với nhiều

var newString = str.replace(/[^A-Z0-9]+/ig, "_"); 

Điều đó sẽ dẫn đến hello_world_hello_universe

2

Xóa \s khỏi regex mới của bạn và nó sẽ hoạt động - khoảng trắng đã được đưa vào "bất kỳ thứ gì trừ chữ và số".

Lưu ý rằng bạn có thể muốn thêm + sau ] để bạn không nhận được nhiều hơn một dấu gạch dưới. Bạn cũng có thể chuỗi vào .replace(/^_+|_+$/g,'') để cắt bớt dấu gạch dưới ở đầu hoặc cuối chuỗi.

+0

Tại sao gọi riêng 'thay thế 'khi bạn có thể thêm' + 'vào regex đầu tiên? – MBO

+0

Bởi vì ... điểm tốt. Tôi đã nghĩ về điều gì đó khác, tôi đoán vậy. Tuy nhiên, bạn có thể chuỗi trên một regex 'trim' giống như. –

Các vấn đề liên quan