Jika saya memiliki string dengan semua jenis karakter non-alfanumerik di dalamnya:
"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"
Bagaimana cara saya mendapatkan versi no-punctuation dalam JavaScript:
"This is an example of a string with punctuation"
javascript
regex
Quentin Fisk
sumber
sumber
\s
) dengan satu spasi. Jika Anda ingin runtuh sejumlah karakter spasi ke satu, Anda akan meninggalkan dari batas atas seperti:replace(/\s{2,}/g, ' ')
.@+?><[]+
):replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()@\+\?><\[\]\+]/g, '')
. Jika ada yang mencari set yang sedikit lebih lengkap.!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Yang bekerja lebih baik bagi saya, jadi alternatif lain adalah:replace(/['!"#$%&\\'()\*+,\-\.\/:;<=>?@\[\\\]\^_`{|}~']/g,"");
Menghapus semuanya kecuali karakter alfanumerik dan spasi putih, lalu menciutkan beberapa karakter yang berdekatan ke spasi tunggal.
Penjelasan detail:
\w
adalah angka, huruf, atau garis bawah.\s
adalah spasi apa saja.[^\w\s]
adalah segala sesuatu yang bukan angka, huruf, spasi, atau garis bawah.[^\w\s]|_
sama dengan # 3 kecuali dengan garis bawah ditambahkan kembali.sumber
wouldn't
dandon't
Berikut adalah karakter tanda baca standar untuk US-ASCII:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Untuk tanda baca Unicode (seperti tanda kutip, em-strip, dll), Anda dapat dengan mudah mencocokkan pada rentang blok tertentu. The General Tanda baca blok
\u2000-\u206F
, dan Tambahan Tanda baca blok\u2E00-\u2E7F
.Disatukan, dan lolos dengan benar, Anda mendapatkan RegExp berikut:
Itu harus cocok dengan hampir semua tanda baca yang Anda temui. Jadi, untuk menjawab pertanyaan awal:
Sumber US-ASCII: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#posix
Sumber Unicode: http://kourge.net/projects/regexp-unicode-block
sumber
/ [^ A-Za-z0-9 \ s] / g harus cocok dengan semua tanda baca tetapi simpan spasinya. Jadi Anda dapat menggunakan
.replace(/\s{2,}/g, " ")
untuk mengganti ruang tambahan jika Anda perlu melakukannya. Anda dapat menguji regex di http://rubular.com/Pembaruan : Hanya akan berfungsi jika inputnya adalah bahasa Inggris ANSI.
sumber
Saya mengalami masalah yang sama, solusi ini berhasil dan sangat mudah dibaca:
Hasil:
Triknya adalah membuat set yang dinegasikan . Ini berarti cocok dengan apa pun yang tidak ada dalam himpunan yaitu
[^abc]
- bukan a, b atau c\W
bukan kata, jadi[^\W]+
akan meniadakan apa pun yang bukan kata char .Dengan menambahkan _ (garis bawah) Anda dapat meniadakannya juga.
Buat itu berlaku secara global
/g
, maka Anda dapat menjalankan string apa pun melewatinya dan menghapus tanda baca:Bagus dan bersih;)
sumber
Saya hanya akan menaruhnya di sini untuk orang lain.
Cocokkan semua tanda baca untuk untuk semua bahasa:
Dibangun dari kategori tanda baca Unicode dan menambahkan beberapa simbol keyboard umum seperti
$
dan tanda kurung dan\-=_
http://www.fileformat.info/info/unicode/category/Po/list.htm
ganti dasar:
ditambahkan sebagai ruang
menambahkan ^ untuk membalikkan patternt agar tidak cocok dengan tanda baca tetapi kata-kata yang ditampilkan
untuk bahasa seperti bahasa Ibrani mungkin untuk menghapus "" kutipan tunggal dan ganda, dan melakukan lebih banyak pemikiran tentang itu.
menggunakan skrip ini:
langkah 1: pilih di Firefox memegang kontrol kolom nomor U + 1234 dan salin, jangan menyalin U + 12456 mereka ganti bahasa Inggris
langkah 2 (saya lakukan di chrome) menemukan beberapa textarea dan rekatkan ke dalamnya kemudian klik kanan dan klik periksa. maka Anda dapat mengakses elemen yang dipilih dengan $ 0.
Langkah 3 disalin pada huruf pertama ascii sebagai karakter terpisah bukan rentang karena seseorang dapat menambah atau menghapus karakter individu
sumber
Dalam bahasa yang menyadari Unicode, properti karakter Tanda Baca Unicode adalah
\p{P}
- yang biasanya bisa Anda singkatan\pP
dan terkadang diperluas menjadi\p{Punctuation}
untuk dibaca.Apakah Anda menggunakan pustaka Ekspresi Reguler Kompatibel Kompatibel Perl?
sumber
Jika Anda ingin menghapus tanda baca dari string apa pun, Anda harus menggunakan
P
kelas Unicode.Tapi, karena kelas tidak diterima di JavaScript RegEx, Anda bisa mencoba RegEx ini yang harus cocok dengan semua tanda baca. Ini cocok dengan kategori berikut: Pc Pd Pe Pf Pi Po Sc Sc Sm Jadi Umum Tanda Baca Tambahan Tanda Baca CJKSimbol Simbol Dan Dan Tanda Baca CuneiformNomor dan Tanda Baca.
Saya membuatnya menggunakan alat online ini yang menghasilkan Ekspresi Reguler khusus untuk JavaScript. Itulah kode untuk mencapai tujuan Anda:
sumber
Untuk string en-US (Bahasa Inggris Amerika) ini sudah cukup:
Ketahuilah bahwa jika Anda mendukung UTF-8 dan karakter seperti Cina / Rusia dan semuanya, ini akan menggantikan mereka juga, jadi Anda benar-benar harus menentukan apa yang Anda inginkan.
sumber
jika Anda menggunakan lodash
Contoh ini
sumber
Sesuai daftar tanda baca Wikipedia saya harus membuat regex berikut yang mendeteksi tanda baca:
[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]
sumber
/
(paling umum) maka harus lolos dalam kelas karakter di atas dengan menambahkan back-slash sebelumnya, seperti ini:\/
. Ini adalah bagaimana Anda akan menggunakannya:"String!! With, Punctuation.".replace(/[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";\/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]+/g,"")
. Omong-omong, saya tidak melihat backtick (`) di mana saja di sana, bagaimana bisa?Jika Anda ingin mempertahankan hanya huruf dan spasi, Anda dapat melakukan:
sumber
Tergantung pada apa yang Anda coba untuk kembali. Saya menggunakan ini baru-baru ini:
sumber