Character Classes — Regex

Apa itu Character Class? Character class (kelas karakter) memungkinkan kamu mencocokkan satu karakter dari sekumpulan karakter tertentu. Ditulis di dalam…

Character class adalah daftar karakter yang boleh muncul di satu posisi, ditulis di dalam kurung siku: [0-9] artinya "satu angka, 0 sampai 9". Bayangin gembok koper dengan roda angka. Tiap roda cuma bisa menunjukkan satu karakter, dan pilihannya cuma 0 sampai 9. Gembok empat roda sama dengan [0-9][0-9][0-9][0-9]: empat posisi, tiap posisi satu angka.

🧪 Tebakan cepat: "Rp85.000".match(/[0-9]/g) hasilnya ['85', '000'] atau ['8', '5', '0', '0', '0']? Tebak dulu, jawabannya ada di bagian "Satu class, satu karakter".

Satu class, satu karakter

console.log("Rp85.000".match(/[0-9]/g));  // ['8', '5', '0', '0', '0']
console.log(chat.match(/08[0-9][0-9]/g)); // ['0812', '0812']

Rentang dan gabungan

Tanda - di antara dua karakter membuat rentang:

Negasi: [^...]

^ tepat setelah [ membalik daftarnya: satu karakter apa pun selain isi daftar.

console.log("Rp85.000".match(/[^0-9]/g)); // ['R', 'p', '.']

[^0-9] ikut cocok dengan spasi dan ganti baris, karena keduanya juga bukan angka. ^ cuma membalik kalau ada di posisi pertama: [0-9^] artinya angka atau tanda ^.

Shorthand: \d, \w, \s

Tiga class yang paling sering dipakai punya singkatan:

console.log("Rp85.000".match(/\d/g)); // ['8', '5', '0', '0', '0']
console.log("Rp85.000".match(/\D/g)); // ['R', 'p', '.']

\d cuma mengenal angka ASCII 0 sampai 9. /\d/.test("٣") (angka Arab) dan /\d/.test("1") (angka lebar penuh) dua-duanya false.

Metacharacter di dalam kurung siku

Di dalam [...], kebanyakan metacharacter jadi karakter biasa. [.,] artinya titik atau koma, bukan "karakter apa pun":

console.log("Rp85.000 atau Rp85,000".match(/[.,]/g)); // ['.', ',']

Yang masih punya arti khusus di dalam kurung siku cuma empat: ] menutup daftar, \ untuk escape, ^ di posisi pertama untuk negasi, dan - di antara dua karakter untuk rentang. Mau - biasa? Taruh di ujung: [0-9-] artinya angka atau tanda strip.

Cek seluruh teks: +, {n}, ^, dan $

Satu class cuma satu karakter. Buat validasi isian, kenalan dulu dengan empat tanda ini (detailnya di dua pelajaran berikutnya):

console.log("Rp85.000".match(/[0-9]+/g));  // ['85', '000']
console.log("Rp85.000".match(/[0-9.]+/g)); // ['85.000']
console.log("abc123".match(/[a-z]+/g));    // ['abc']

const kodeSah = /^PO-[0-9]{4}$/;
console.log(kodeSah.test("PO-0413"));      // true
console.log(kodeSah.test("Kode PO-0413")); // false: ada teks sebelum PO
console.log(kodeSah.test("PO-04133"));     // false: 5 angka
console.log(/[0-9]/.test("Kode PO-0413")); // true: cukup ada satu angka

⚠️ Jebakan yang sering ketemu

TL;DR: [...] cocok dengan satu karakter dari daftar. - membuat rentang ([0-9], [a-z], [A-Za-z0-9]), ^ di posisi pertama membalik daftar ([^0-9]), dan di dalam kurung siku . dan kebanyakan metacharacter jadi biasa. \d = [0-9] (angka ASCII saja), \w = [A-Za-z0-9_], \s = spasi, tab, ganti baris; huruf besarnya kebalikan (\D = bukan digit). Buat validasi: + satu atau lebih, {n} tepat n, ^ dan $ mengunci awal dan akhir teks, dan || menggabungkan dua pola.

Yang akan kamu pelajari