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.
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
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
@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