2012-02-02 42 views
17

Tôi cố gắng này:jQuery - Thay thế tất cả ngoặc trong một chuỗi

mystring= mystring.replace(/"/g, "").replace(/'/g, "").replace("(", "").replace(")", ""); 

Nó hoạt động cho tất cả các dấu ngoặc kép và đơn nhưng đối với dấu ngoặc đơn, điều này chỉ thay thế ngoặc đầu tiên trong chuỗi.

Làm cách nào để làm cho nó hoạt động để thay thế tất cả dấu ngoặc đơn trong chuỗi bằng JavaScript? Hoặc thay thế tất cả các ký tự đặc biệt trong một chuỗi?

+0

Đây không phải jQuery, nó chỉ là tiêu chuẩn javascr ipt – rickyduck

+0

oops! hy vọng bạn hiểu yêu cầu, tôi cần phải thực hiện điều này bằng jquery hoặc javascript chuẩn. bạn có thể giúp tôi không? – HaBo

Trả lời

26

Hãy thử như sau:

mystring= mystring.replace(/"/g, "").replace(/'/g, "").replace(/\(|\)/g, ""); 

Một chút regex để lấy những ngoặc pesky.

6

Bạn sẽ có thể thực hiện điều này trong một tuyên bố thay thế duy nhất.

mystring = mystring.replace(/["'\(\)]/g, ""); 

Nếu bạn đang cố gắng để thay thế tất cả đặc biệt ký tự mà bạn có thể muốn sử dụng một mô hình như thế này.

mystring = mystring.replace(/\W/g, ""); 

Điều gì sẽ thay thế mọi ký tự không phải từ.

0

Nên hoạt động:

mystring= mystring.replace(/"/g, "").replace(/'/g, "").replace(/\(/g, "").replace(/\)/g, ""); 
21

Bạn nên sử dụng một cái gì đó như thế này:

mystring = mystring.replace(/["'()]/g,""); 

Lý do nó không được làm việc cho những người khác là do quên "toàn cầu" lập luận (g)

lưu ý rằng [...] là một lớp nhân vật. bất kỳ thứ gì giữa các dấu ngoặc đó được thay thế.

+0

Bạn không cần phải thoát khỏi dấu ngoặc đơn? –

+1

@MattFellows không nằm trong lớp nhân vật. (Tôi có xu hướng đặt các ký tự đặc biệt trong các lớp nhân vật chỉ vì vậy tôi không phải thoát khỏi chúng ... làm cho nó dễ đọc hơn đối với tôi ít nhất: P) –

+1

@MattFellows Tôi sẽ thêm tuy nhiên ngoại lệ cho điều này là '[' , ']' và '\\' cần thực hiện thoát. –

0

Đó là vì thay thế nhiều lần xuất hiện, bạn phải sử dụng regex làm chuỗi tìm kiếm nơi bạn đang sử dụng chuỗi ký tự. Như bạn đã tìm thấy, tìm kiếm theo chuỗi sẽ chỉ thay thế lần xuất hiện đầu tiên.

2

Bạn cũng có thể sử dụng trải nghiệm thường xuyên nếu bạn đang tìm kiếm dấu ngoặc đơn, bạn chỉ cần thoát khỏi chúng.

mystring = mystring.replace(/\(|\)/g, ''); 

Điều này sẽ loại bỏ tất cả () trong toàn bộ chuỗi.

0

Phương pháp thay thế dựa trên chuỗi sẽ không thay thế trên toàn cầu. Như vậy, bạn có thể muốn sử dụng phương thức thay thế dựa trên regex.Cần lưu ý:

Bạn cần phải thoát khỏi () khi chúng được sử dụng cho nhóm khớp:

mystring= mystring.replace(/"/g, "").replace(/'/g, "").replace(/\(/g, "").replace(/\)/g, ""); 
+0

Nhưng không có khái niệm về "nhóm" cho phiên bản phi regex của 'thay thế 'mà OP đang sử dụng. –

+0

Điều đó là đúng - nhưng để thay thế toàn cầu, bạn cần sử dụng regex tôi tin - vì vậy tại sao tôi đã sugested một regex, và sau đó tuyên bố của tôi là đúng sự thật. –

+0

Đó là sự thật, nhưng nó chỉ là một chút IMO gây hiểu lầm kể từ khi vấn đề nhóm không phải là nguyên nhân của vấn đề ban đầu của OP. Tôi chỉ nghĩ rằng nó có giá trị một đề cập cụ thể mà bạn đang chuyển đổi của mình dựa trên chuỗi 'thay thế' để regex dựa trên 'thay thế'. –

1

Chỉ cần một thay thế sẽ làm:

"\"a(b)c'd{e}f[g]".replace(/[\(\)\[\]{}'"]/g,"") 
0

Điều này có thể giải quyết vấn đề: myString = myString.replace(/\"|\'|\(|\)/) Example

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