2011-07-28 27 views
17

Tôi đang cố gắng này:Làm cách nào để đặt [] (dấu ngoặc vuông) trong RegExp javascript?

str = "bla [bla]"; 
str = str.replace(/\\[\\]/g,""); 
console.log(str); 

Và thay thế không làm việc, những gì tôi làm sai?

CẬP NHẬT: Tôi đang cố gắng để loại bỏ bất kỳ dấu ngoặc vuông trong chuỗi, gì lạ là nếu tôi làm

replace(/\[/g, '') 
replace(/\]/g, '') 

nó hoạt động, nhưng
replace(/\[\]/g, '');
không.

Trả lời

38

Nó nên là:

str = str.replace(/\[.*?\]/g,""); 

Bạn không cần backslashes đôi (\) bởi vì nó không phải là một chuỗi nhưng một tuyên bố regex, nếu bạn xây dựng regex từ một chuỗi bạn làm cần các dấu gạch chéo ngược đôi;).

Nó cũng đúng nghĩa là giải thích 1 (không phù hợp). Sử dụng .* cho biết bất kỳ giá trị nào giữa các dấu ngoặc vuông.

mới RegExp chuỗi xây dựng phiên bản sẽ là:

str=str.replace(new RegExp("\\[.*?\\]","g"),""); 

UPDATE: Để loại bỏ dấu ngoặc vuông chỉ:

str = str.replace(/\[(.*?)\]/g,"$1"); 

mã trên của bạn không hoạt động, bởi vì nó đang cố gắng để phù hợp với "[]" (tuần tự mà không có bất kỳ điều gì được phép giữa). Chúng ta có thể giải quyết vấn đề này bằng cách kết hợp nhóm không tham lam ((.*?)) giữa các dấu ngoặc vuông và sử dụng một backreference ($1) để thay thế.

UPDATE 2: Để loại bỏ nhiều dấu ngoặc vuông

str = str.replace(/\[+(.*?)\]+/g,"$1"); 
// bla [bla] [[blaa]] -> bla bla blaa 
// bla [bla] [[[blaa] -> bla bla blaa 

Lưu ý điều này không phù hợp với mở/lượng chặt chẽ, chỉ đơn giản là loại bỏ tất cả các tuần tự mở ra và đóng lại. Ngoài ra nếu các dấu ngoặc liên tiếp có dấu phân cách (dấu cách, vv), nó sẽ không khớp.

+0

thanx, nhưng tôi chỉ cố gắng loại bỏ bất kỳ dấu ngoặc vuông nào, không có gì bên trong chúng – ilyo

+6

Giải pháp của bạn sẽ không xóa tất cả dấu ngoặc vì tham số ". *" Đó. Bạn không cần nó anyway - chỉ 'str.replace (/ [\ [\]]/g, '')' – Pointy

+0

@Rudu điều này làm việc nếu tôi có một dấu ngoặc đơn mở và đóng, nếu tôi có '[[ ['? – ilyo

0

Hai backslashes tạo ra một dấu chéo ngược duy nhất, vì vậy bạn đang tìm kiếm "một dấu gạch chéo, tiếp theo là một lớp nhân vật bao gồm một 1 hoặc một right bracket, và sau đó bạn đang bỏ lỡ một dấu ngoặc đóng.

Hãy thử

str.replace(/\[1\]/g, ''); 
1

Bạn phải thoát khỏi khung, như \[\]. Kiểm tra http://regexpal.com/. Nó khá hữu ích :)

để thay thế tất cả các dấu ngoặc trong một chuỗi , điều này sẽ thực hiện công việc:

str.replace(/\[|\]/g,''); 

Tôi hy vọng điều này sẽ hữu ích.
Hristo

0

Chính xác bạn đang cố gắng kết hợp gì?

Nếu bạn không thoát khỏi dấu ngoặc đơn, chúng được coi là các lớp nhân vật. Điều này:

/[1\\]/ 

Phù hợp với 1 hoặc dấu gạch chéo ngược. Bạn có thể muốn thoát khỏi chúng chỉ bằng một dấu gạch chéo ngược:

/\[1\]/ 

Nhưng điều này sẽ không khớp với nhau vì bạn không có [1] trong chuỗi.

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