Panduan Pemula untuk Ekspresi Reguler (Regex)
Ekspresi reguler adalah sekumpulan karakter yang membentuk pola yang dapat dicari dalam sebuah string. Regex dapat digunakan untuk validasi seperti untuk memvalidasi nomor kartu kredit, untuk pencarian yaitu melalui pencocokan teks yang kompleks, dan untuk mengganti teks yang cocok dengan string lain. Ini juga memiliki dukungan banyak bahasa - pelajari sekali dan Anda dapat menggunakannya di banyak bahasa pemrograman.
Saya telah melihat beberapa orang melihat regex pertama kali, dan mengabaikannya sepenuhnya. Saya tidak menyalahkan mereka; Sintaksis regex kompleks dan akan membuat banyak ngeri seperti bahasa-bahasa baris perintah, hanya lebih buruk. Tapi kemudian setiap hal baru itu menakutkan dan tampaknya mustahil untuk dipelajari pada awalnya. Jadi, meminjam kata-kata Horatius aku akan mengatakan ini; Mulailah, berani, dan berani untuk menjadi bijaksana.
Tentang Regex
Regex berakar pada ilmu saraf dan matematika dan hanya diimplementasikan dalam pemrograman pada tahun 1968 oleh Ken Thompson dalam editor teks QED untuk pencarian teks. Sekarang bagian dari banyak bahasa pemrograman seperti Perl, Java, Python, Ruby, dan JavaScript.
Mari kita lihat beberapa contoh bagaimana regex bekerja.
Saya akan menggunakan JavaScript dalam contoh saya. Sekarang, untuk lulus tingkat pemula, Anda perlu mempelajari semua itu karakter, kelas, bilangan, pengubah dan metode digunakan dalam regex. Berikut ini tautan ke halaman Ekspresi Reguler Jaringan Pengembang Mozilla tempat Anda dapat melihat tabel yang berisi semua itu. Anda juga dapat merujuk ke lembar contekan di akhir posting ini dengan karakter yang paling banyak digunakan.
Mari kita lihat contoh sederhana dengan penjelasan. Ini adalah regex.
Inilah yang akan dicari oleh regex di atas dalam satu baris, karakter 'B' diikuti oleh setidaknya satu dari setiap karakter antara (dan termasuk) 'a' hingga 'z', 'A' ke 'Z' dan angka 0 hingga 9.
Berikut contoh kecocokan dalam garis yang disorot:
Keranjang, bohlam, B12 vitamin, BaSO4, N SM perusahaan
Regex di atas akan menghentikan pencarian di Keranjang dan kembalikan respons positif. Itu karena pengubah global 'g
'harus ditentukan jika Anda ingin regex melihat semua kemungkinan kecocokan.
Sekarang, mari kita lihat bagaimana menggunakan ungkapan ini dalam JavaScript. Itu uji
Metode berjalan: jika ditemukan pertandingan kembali benar
, lain Salah
.
input var = "string pengujian Anda", regex = / B [a-zA-Z \ d] + /; if (! regex.test (input)) lansiran ('Tidak ada kecocokan ditemukan'); waspada lain ('Ditemukan kecocokan');
Mari kita coba metode lain: pertandingan
mengembalikan kecocokan yang ditemukan dalam array.
var input = "string pengujian Anda", regex = / B [a-zA-Z \ d] + / g, / * Saya telah menambahkan pengubah global 'g' ke regex untuk mendapatkan semua kecocokan * / ary = input.match (regex); if (ary === null) waspada ('Tidak ada kecocokan ditemukan'); lansiran lain ('kecocokan adalah:' + ary.toString ());
Bagaimana dengan string menggantikan
? Mari kita coba dengan regex sekarang.
input var = "string pengujian Anda", regex = / B [a-zA-Z \ d] + / g; alert (input.replace (regex, "#"));
Di bawah ini adalah codepen untuk Anda tweak. Klik tab "JavaScript" untuk melihat kode JS.
Latihan
Untuk latihan, Anda bisa google “latihan regex” dan cobalah memecahkannya. Inilah yang diharapkan ketika mencoba latihan-latihan ini, sesuai dengan tingkat kesulitannya.
Dasar
Bagi saya bisa memvalidasi kata sandi sudah cukup untuk pemula. Jadi, validasi kata sandi sepanjang 8 hingga 16 karakter, alfanumerik dengan pilihan karakter khusus yang diizinkan.
Menengah
Di sinilah Anda harus berlatih dengan lebih banyak data dunia nyata dan belajar beberapa poin regex seperti lihat ke depan, lihat di belakang pernyataan dan kelompok yang cocok;
- Validasi kode PIN, heksadesimal, tanggal, ID email, titik apung.
- Ganti trailing zero, spasi putih, satu set kata yang cocok
- Ekstrak berbagai bagian URL
Maju
Anda dapat mengoptimalkan solusi latihan di atas - regex paling optimal untuk email memiliki ribuan karakter di dalamnya - jadi bawa sejauh yang Anda rasa nyaman dan itu sudah cukup. Anda juga dapat mencoba:
- Mem-parsing HTML atau XML (walaupun di dunia nyata tidak disarankan untuk melakukannya karena menggunakan ekspresi reguler untuk mem-parsing bahasa non-reguler seperti HTML tidak akan pernah membuatnya mudah. Ditambah parsing XML adalah tugas yang sulit, lebih cocok untuk pengguna tingkat lanjut)
- Mengganti tag
- Menghapus komentar (kecuali komentar bersyarat IE)
Alat
Alat untuk memvisualisasikan regex adalah salah satu hal paling keren di luar sana untuk saya. Jika Anda pernah menemukan regex yang panjang dan rumit, cukup salin tempel ke salah satu alat itu dan Anda akan dapat melihat alurnya dengan jelas. Selain itu, ada banyak alat yang bisa Anda gunakan untuk mengutak-atik kode regex. Mereka juga menampilkan contoh dan lembar contekan bersama dengan fitur berbagi.
- Debuggex - Ini menggambar diagram regex sesuai input Anda dan Anda dapat membuat bagikan cepat ke StackOverflow langsung dari sana.
- RegExr - Anda dapat menguji regex Anda dengan yang ini. Itu juga punya referensi, lembar contekan dan contoh untuk membantu Anda.
- Refiddle - Saat ini, selain JavaScript, Anda juga bisa bermain-main dengan Ruby dan .NET versi regex di dalamnya.
Regex Cheatsheet
Token | Definisi |
[abc] | Setiap karakter tunggal a, b atau c |
[^ abc] | Karakter apa pun selain a, b atau c |
[a-z] | Karakter antara (termasuk) a hingga z |
[^ a-z] | Karakter kecuali dari a hingga z |
[A-Z] | Karakter antara (termasuk) A hingga Z |
. | Setiap karakter tunggal |
\ s | Setiap karakter spasi putih |
\ S | Karakter non-spasi putih |
\ d | Digit apa saja 0 hingga 9 |
\ D | Non-digit |
\ w | Setiap karakter kata (huruf, angka & garis bawah) |
\ W | Karakter non-kata |
(...) | Tangkap semua yang terlampir |
(a | b) | Cocok dengan a atau b |
Sebuah? | Karakter a tidak ada atau hadir satu kali |
Sebuah* | Karakter a tidak ada atau hadir lebih banyak |
Sebuah+ | Karakter a hadir satu kali atau lebih |
a 3 | 3 kemunculan karakter secara berurutan |
a 3, | 3 atau lebih kemunculan karakter secara berurutan |
a 3,6 | 3 hingga 6 kemunculan karakter secara berurutan |
^ | Mulai dari string |
$ | Akhir dari string |
\ b | Batas kata. Jika suatu karakter adalah karakter kata terakhir atau kata pertama dari suatu kata atau Jika suatu karakter berada di antara karakter kata atau non-kata |
\ B | Batas tanpa kata |