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.

James Jeffery
sumber

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, ' ');
Darin Dimitrov
sumber
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"
sbmaxx.dll
sumber
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.

favo
sumber
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, ' ')

aayushi
sumber
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

Youssef AbouEgla
sumber
3

Hanya untuk dilihat orang lain:

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

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

Sumber

Richie
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 = '§$)% #$@';

Juan Gaitán
sumber
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

aloisdg pindah ke codidact.com
sumber