Ekspresi Reguler: Semua karakter yang BUKAN huruf atau angka


113

Saya mencoba mencari persamaan reguler yang akan cocok dengan karakter apa pun yang bukan huruf atau angka. Jadi karakter seperti (,, @, £, () dll ...

Setelah ditemukan saya ingin menggantinya dengan spasi kosong.

Ada saran.

Jawaban:


165

Untuk mencocokkan apa pun selain huruf atau angka, Anda dapat mencoba ini:

[^a-zA-Z0-9]

Dan untuk mengganti:

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

17
\wadalah untuk karakter Word dan persis sama dengan [a-zA-Z0-9_](perhatikan bahwa garis bawah dianggap sebagai karakter kata.) ... jadi singkatannya adalahstr.replace(/[^\w]/g, ' ')
— Joel Mellon

tetapi itu akan menyertakan banyak huruf unicode juga! apakah ada cara untuk mengecualikan huruf unicode?
— Clite Tailor

1
Untuk menyertakan karakter unicode, Anda dapat menggunakan [^ \ p {L} 0-9]
— Dave

@Dave: Pada 2018 Anda tidak bisa tanpa polyfill, tampaknya ... stackoverflow.com/questions/280712/javascript-unicode-regexes
— Nickolay

apakah ada cara, selain membalas dengan spasi ... ganti dengan "\" diikuti dengan karakter yang telah diidentifikasi? Seperti ini: buat dfj ini, dsf7lfsd .sdklfj menjadi dfj \, dsf7lfsd \ .sdklfj ini?
— CrazySpy

39

Ekspresi reguler ini cocok dengan apa pun yang bukan berupa huruf, angka, atau garis bawah ( _).

\W

Misalnya di JavaScript:

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

Saya yakin dia mencari / (_ | \ W) / g, untuk mencocokkan apa pun yang bukan angka atau huruf (bahasa Inggris)
— kennebec

@sbmaxx Saya ingin mengganti semua kecuali &, (,) karakter ini. bagaimana saya bisa menambahkan kondisi ini di regex saat ini.
— K Pal

17

Anda mencari:

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

Ini menggantikan semua karakter non-alfanumerik dengan spasi.

Huruf "g" di akhir menggantikan semua kemunculan.

Alih-alih menentukan az (huruf kecil) dan AZ (huruf besar) Anda juga dapat menggunakan di-case-sensitive pilihan: /[^a-z0-9]/gi.


Akankah itu cocok dengan ruang juga? Saya butuh ruang untuk disimpan. Terima kasih.
— James Jeffery

Karakter spasi akan cocok, tetapi kemudian akan diganti dengan karakter spasi, jadi efeknya akan membiarkan mereka sendiri (spasi akan tetap menjadi spasi).
— jimbo


5

coba lakukan str.replace (/ [^ \ w] /); Ini akan menggantikan semua non-alfabet dan angka dari string Anda!

Edit 1: str.replace(/[^\w]/g, ' ')


2
Jawaban yang berhasil adalah str.replace(/[^\w]/g, ' '). Jika Anda tidak menyertakan /gbendera, itu hanya akan menggantikan kemunculan pertama. Dan jika Anda tidak menentukan string pengganti, di sini spasi kosong ' ', akan diganti di undefinedsemua tempat. Terakhir, garis bawah tidak akan diganti karena cocok \w. Jawaban ini tidak pas.
— Julien Lirochon

4
  • Cocokkan huruf saja /[A-Z]/ig
  • Cocokkan apapun yang bukan huruf /[^A-Z]/ig
  • Nomor pertandingan saja /[0-9]/gatau/\d+/g
  • Cocokkan apapun yang bukan angka /[^0-9]/gatau/\D+/g
  • Cocokkan apapun, bukan angka atau huruf /[^A-Z0-9]/ig

Ada kemungkinan pola lain


3

Hanya untuk dilihat orang lain:

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

akan menghapus karakter unicode non-huruf dan non-angka.

Sumber


Saya tidak yakin dari mana dua suara positif itu berasal, tetapi dalam JavaScript (tentang pertanyaan ini) tidak ada replaceAll, dan \p{..}pelarian properti tidak diterapkan secara luas.
— Nickolay

2

Sudahkah Anda mencobanya str = str.replace(/\W|_/g,'');akan mengembalikan string tanpa karakter apa pun dan Anda dapat menentukan apakah ada karakter utama setelah pipa bar |untuk menangkap mereka juga.

var str = "1324567890abc§$)% John Doe #$@'.replace(/\W|_/g, ''); itu akan kembali str = 1324567890abcJohnDoe

atau cari angka dan huruf dan gantikan dengan string kosong (""):

var str = "1324567890abc§$)% John Doe #$@".replace(/\w|_/g, ''); itu akan kembali str = '§$)% #$@';


1

Untuk mencocokkan apa pun selain huruf atau angka atau huruf dengan diakritik seperti éAnda dapat mencoba ini:

[^\wÀ-úÀ-ÿ]

Dan untuk mengganti:

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

Terinspirasi oleh pos teratas dengan dukungan untuk diakritik

sumber

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.