Panduan Permulaan untuk Perincian Biasa (Regex)
Ungkapan biasa adalah satu set aksara membentuk corak yang boleh dicari dalam rentetan. Regex boleh digunakan untuk pengesahan seperti untuk mengesahkan nombor kad kredit, untuk carian iaitu melalui padanan teks kompleks, dan untuk menggantikan teks yang dipadankan dengan tali lain. Ia juga mempunyai banyak sokongan bahasa yang hebat - belajar sekali dan anda boleh menggunakannya di banyak bahasa pengaturcaraan.
Saya telah melihat beberapa orang mengambil pandangan pertama pada regex, dan mengabaikannya sepenuhnya. Saya tidak menyalahkan mereka; sintaks regex adalah rumit dan akan membuat banyak rasa seperti bahasa baris arahan, hanya lebih buruk. Tetapi setiap perkara baru menakutkan dan seolah-olah mustahil untuk belajar pada mulanya. Jadi, meminjam kata-kata Horatius saya akan mengatakan ini; Mulailah, berani, dan berani untuk bijak.
Mengenai Regex
Regex mempunyai akar dalam bidang neurosains dan matematik dan hanya dilaksanakan dalam pengaturcaraan pada tahun 1968 oleh Ken Thompson dalam editor teks QED untuk carian teks. Sekarang ia adalah sebahagian daripada banyak bahasa pengaturcaraan seperti Perl, Java, Python, Ruby, dan JavaScript.
Mari lihat beberapa contoh bagaimana regex berfungsi.
Saya akan menggunakan JavaScript dalam contoh saya. Sekarang, untuk lulus tahap pemula, anda perlu belajar semua aksara, kelas, kuantitatif, pengubah dan kaedah digunakan dalam regex. Berikut adalah pautan ke halaman Pengekalan Regular Network Developer Mozilla dimana anda boleh melihat jadual yang mengandungi semua itu. Anda juga boleh merujuk kepada cheatsheet di hujung jawatan ini dengan aksara yang paling banyak digunakan.
Mari lihat contoh mudah dengan penjelasan. Ini adalah regex.
Inilah yang akan dicari oleh regex di atas dalam baris, watak 'B' diikuti oleh sekurang-kurangnya salah satu watak antara (dan termasuk) 'a' hingga 'z', 'A' hingga 'Z' dan nombor 0 9.
Inilah contoh perlawanan dalam garis yang diserlahkan:
Bakul, mentol, B12 vitamin, BaSO4, N BC syarikat
Regex di atas akan menghentikan carian di Bakul dan membalas respon positif. Itu kerana pengubahsuaian global 'g
'harus ditentukan jika anda mahu regex melihat semua perlawanan yang mungkin.
Sekarang, mari lihat cara menggunakan ungkapan ini dalam JavaScript. The ujian
kaedah pergi: jika terdapat pulangan perlawanan benar
, lain salah
.
var input = "string ujian anda", regex = / B [a-zA-Z \ d] + /; jika isyarat (! regex.test (input)) ('Tidak sepadan'); lain berjaga-jaga ('Pertandingan ditemui');
Mari cuba kaedah lain: perlawanan
mengembalikan padanan yang terdapat dalam array.
var input = "string test anda", regex = / B [a-zA-Z \ d] + / g, / * Saya telah menambahkan 'g' pengubah global kepada regex untuk mendapatkan semua perlawanan * / ary = input.match (regex); jika (ary === null) waspada ('Tidak ada padanan yang dijumpai'); lain berjaga ('perlawanan adalah:' + ary.toString ());
Bagaimana dengan tali menggantikan
? Mari kita cuba dengan regex sekarang.
var input = "string ujian anda", regex = / B [a-zA-Z \ d] + / g; amaran (input.replace (regex, "#"));
Di bawah ini adalah codepen untuk anda tweak. Klik tab "JavaScript" untuk melihat kod JS.
Latihan
Untuk latihan, anda boleh google “latihan regex” dan cuba menyelesaikannya. Berikut adalah apa yang diharapkan apabila mencuba latihan ini, mengikut tahap kesukaran.
Asas
Kepada saya dapat sahkan kata laluan sudah cukup untuk permulaan. Jadi, sahkan kata laluan untuk 8 hingga 16 aksara panjang, abjad angka dengan pilihan aksara khusus yang anda pilih.
Perantaraan
Di sinilah anda harus berlatih dengan lebih banyak data dunia sebenar dan belajar sedikit lagi mata regex seperti lookahead, menegaskan pernyataan dan kumpulan yang sepadan;
- Mengesahkan kod PIN, heksadesimal, tarikh, ID e-mel, titik terapung.
- Gantikan ketinggian sifar, ruang putih, satu set kata sepadan
- Ekstrak bahagian yang berlainan dari URL
Advanced
Anda boleh mengoptimumkan penyelesaian latihan di atas - regex yang paling optimum untuk e-mel mempunyai ribuan aksara di dalamnya - jadi mengambilnya sejauh yang anda rasa selesa dan itu sudah cukup. Anda juga boleh cuba:
- Parsing HTML atau XML (walaupun dalam dunia nyata tidak digalakkan untuk berbuat demikian kerana menggunakan ungkapan biasa untuk mengurai bahasa yang tidak kerap seperti HTML tidak akan menjadikannya pelindung. Peningkatan XML adalah tugas yang sukar, lebih sesuai untuk pengguna peringkat lanjutan)
- Menggantikan tag
- Mengalih keluar ulasan (kecuali komen bersyarat IE)
Alat
Alat untuk gambarkan regex adalah salah satu perkara paling keren di luar sana untuk saya. Sekiranya anda pernah melihat regex yang panjang kompleks, hanya salin tampalkannya ke salah satu alat tersebut dan anda akan dapat melihat aliran dengan jelas. Selain itu, terdapat banyak alat yang boleh anda gunakan untuk bermain biola dengan kod regex. Mereka juga mempamerkan contoh dan cheatsheets bersama-sama dengan ciri-ciri perkongsian.
- Debuggex - Ia menarik gambarajah regex mengikut input anda dan anda boleh berkongsi dengan cepat ke StackOverflow dari sana.
- RegExr - Anda boleh menguji regex anda dengan yang satu ini. Ia juga mendapat rujukan, satu cheatsheet dan contoh untuk membantu anda.
- Reflection - Pada masa ini, selain JavaScript, anda juga boleh biola dengan versi Ruby dan .NET versi regex di dalamnya.
Cheatheet Regex
Token | Definisi |
[abc] | Mana-mana aksara tunggal a, b atau c |
[^ abc] | Mana-mana aksara selain a, b atau c |
[a-z] | Watak antara (termasuk) a hingga z |
[^ a-z] | Watak kecuali dari a hingga z |
[A-Z] | Watak antara (termasuk) A hingga Z |
. | Mana-mana watak tunggal |
\ s | Mana-mana ruang kosong ruang |
\ S | Mana-mana ruang bukan ruang kosong |
\ d | Mana-mana digit 0 hingga 9 |
\ D | Mana-mana bukan angka |
\ w | Mana-mana aksara kata (huruf, nombor & garis bawah) |
\ W | Mana-mana watak bukan perkataan |
(...) | Tangkap segalanya tertutup |
(a | b) | Padan sama ada a atau b |
a? | Watak a sama ada atau tiada masa |
a * | Watak a sama ada atau tidak hadir lebih masa |
a+ | Watak a hadir satu kali atau lebih |
a 3 | 3 kewujudan watak berturut-turut |
a 3, | 3 atau lebih kejadian watak berturut-turut |
a 3,6 | 3 hingga 6 kejadian watak berturut-turut |
^ | Mula rentetan |
$ | Akhir rentetan |
\ b | Sempadan perkataan. Jika watak ialah watak perkataan terakhir atau pertama perkataan atau Jika watak adalah antara watak perkataan atau bukan kata |
\ B | Sempadan bukan perkataan |