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.