Biểu thức chính quy: Bất kỳ ký tự nào KHÔNG phải là chữ cái hoặc số


112

Tôi đang cố gắng tìm ra biểu thức chính quy sẽ khớp với bất kỳ ký tự nào không phải là chữ cái hoặc số. Vì vậy, các ký tự như (,, @, £, (), v.v.

Sau khi tìm thấy, tôi muốn thay thế nó bằng một khoảng trống.

Mọi lời khuyên.

Câu trả lời:


165

Để khớp với bất kỳ thứ gì khác ngoài chữ cái hoặc số, bạn có thể thử cách này:

[^a-zA-Z0-9]

Và để thay thế:

var str = 'dfj,dsf7lfsd .sdklfj';
str = str.replace(/[^A-Za-z0-9]/g, ' ');

17
\wlà cho các ký tự Word và là chính xác giống như [a-zA-Z0-9_](lưu ý rằng dấu gạch dưới được coi là một nhân vật từ.) ... nên viết tắt sẽ làstr.replace(/[^\w]/g, ' ')
Joel Mellon

nhưng nó cũng sẽ bao gồm nhiều chữ cái unicode! có cách nào để loại trừ các chữ cái unicode không?
Clite Tailor

1
Để bao gồm các ký tự unicode, bạn có thể sử dụng [^ \ p {L} 0-9]
Dave

@Dave: Kể từ năm 2018, bạn không thể thiếu polyfill, rõ ràng là ... stackoverflow.com/questions/280712/javascript-unicode-regexes
Nickolay

có cách nào, thay vì repalce bằng dấu cách ... thay thế bằng "\" theo sau bởi ký tự đã được xác định không? Như thế này: tạo dfj, dsf7lfsd .sdklfj này thành dfj \, dsf7lfsd \ .sdklfj?
CrazySpy

38

Biểu thức chính quy này khớp với bất kỳ thứ gì không phải là chữ cái, chữ số hoặc _ký tự gạch dưới ( ).

\W

Ví dụ trong JavaScript:

"(,,@,£,() asdf 345345".replace(/\W/g, ' '); // Output: "          asdf 345345"

Tôi tin rằng ông đang tìm kiếm / (_ | \ W) / g, để phù hợp với bất cứ điều gì không phải là một chữ số hoặc chữ cái (ngôn ngữ tiếng Anh)
Kennebec

@sbmaxx Tôi muốn thay thế tất cả ngoại trừ &, (,) các ký tự này. làm thế nào tôi có thể thêm điều kiện này trong regex hiện tại.
K Pal

17

Bạn đang tìm kiếm:

var yourVar = '1324567890abc§$)%';
yourVar = yourVar.replace(/[^a-zA-Z0-9]/g, ' ');

Điều này thay thế tất cả các ký tự không phải chữ và số bằng một khoảng trắng.

Chữ "g" ở cuối thay thế tất cả các lần xuất hiện.

Thay vì quy định cụ thể az (chữ thường) và AZ (chữ hoa), bạn cũng có thể sử dụng trong trường hợp nhạy cảm tùy chọn: /[^a-z0-9]/gi.


Nó sẽ phù hợp với không gian? Tôi cần không gian để được giữ. Cảm ơn.
James Jeffery

Các ký tự khoảng trắng sẽ khớp, nhưng sau đó sẽ được thay thế bằng các ký tự khoảng trắng, vì vậy trên thực tế, nó sẽ để nguyên chúng (một dấu cách sẽ là một khoảng trắng).
jimbo


5

thử làm str.replace (/ [^ \ w] /); Nó sẽ thay thế tất cả các bảng chữ cái và số không phải từ chuỗi của bạn!

Chỉnh sửa 1: str.replace(/[^\w]/g, ' ')


2
Một câu trả lời hiệu quả sẽ là str.replace(/[^\w]/g, ' '). Nếu bạn không thêm /gcờ, nó sẽ chỉ thay thế lần xuất hiện đầu tiên. Và nếu bạn không xác định một chuỗi thay thế, ở đây là một khoảng trống ' ', nó sẽ thay thế bằng undefinedtất cả mọi nơi. Cuối cùng, dấu gạch dưới sẽ không được thay thế vì chúng khớp với nhau \w. Câu trả lời này không phải là một sự phù hợp hoàn hảo.
Julien Lirochon

3

Chỉ để những người khác xem:

someString.replaceAll("([^\\p{L}\\p{N}])", " ");

sẽ xóa mọi ký tự unicode không phải chữ cái và không phải số.

Nguồn


Tôi không chắc hai phiếu ủng hộ đến từ đâu, nhưng trong JavaScript (câu hỏi này là về) thì không có replaceAll, và việc \p{..}thoát thuộc tính không được triển khai rộng rãi.
Nickolay

3
  • Chỉ đối sánh các chữ cái /[A-Z]/ig
  • Khớp bất cứ thứ gì không phải chữ cái /[^A-Z]/ig
  • Chỉ khớp số /[0-9]/ghoặc/\d+/g
  • Khớp bất cứ thứ gì không phải số /[^0-9]/ghoặc/\D+/g
  • Khớp bất cứ thứ gì không phải số hoặc chữ cái /[^A-Z0-9]/ig

Có những mẫu có thể có khác


2

Bạn đã thử chưa, str = str.replace(/\W|_/g,'');nó sẽ trả về một chuỗi không có bất kỳ ký tự nào và bạn có thể chỉ định xem có ký tự đặc biệt nào sau thanh ống dẫn |để bắt chúng hay không.

var str = "1324567890abc§$)% John Doe #$@'.replace(/\W|_/g, ''); nó sẽ trở lại str = 1324567890abcJohnDoe

hoặc tìm các chữ số và chữ cái và thay thế chúng cho chuỗi trống (""):

var str = "1324567890abc§$)% John Doe #$@".replace(/\w|_/g, ''); nó sẽ trở lại str = '§$)% #$@';


1

Để so khớp bất kỳ thứ gì khác ngoài chữ cái hoặc số hoặc chữ cái có dấu phụ như ébạn có thể thử cách này:

[^\wÀ-úÀ-ÿ]

Và để thay thế:

var str = 'dfj,dsf7é@lfsd .sdklfàj1';
str = str.replace(/[^\wÀ-úÀ-ÿ]/g, '_');

Lấy cảm hứng từ bài đăng hàng đầu có hỗ trợ dấu phụ

nguồn

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.