Character Classes — Regex

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

Apa itu Character Class?

Character class (kelas karakter) memungkinkan kamu mencocokkan satu karakter dari sekumpulan karakter tertentu. Ditulis di dalam tanda kurung siku [...].

/[aeiou]/.test("halo");  // true (cocok "a")
/[aeiou]/.test("gym");   // false (tidak ada vokal)

Range (Rentang)

Gunakan tanda hubung - untuk mendefinisikan rentang karakter:

// Satu digit
/[0-9]/.test("abc5def");  // true

// Huruf kecil
/[a-z]/.test("Hello");    // true (cocok "e")

// Huruf besar
/[A-Z]/.test("hello");    // false

// Gabungan range
/[a-zA-Z0-9]/.test("!");  // false (bukan huruf/angka)

Kamu bisa menggabungkan beberapa range dalam satu class: [a-zA-Z] cocok dengan huruf apa saja (besar atau kecil).

Negasi (Negated Class)

Tambahkan ^ di awal character class untuk mencocokkan karakter yang TIDAK ada di dalam kelas:

// Bukan angka
/[^0-9]/.test("123");    // false (semuanya angka)
/[^0-9]/.test("12a3");   // true (ada "a")

// Bukan huruf kecil
/[^a-z]/.test("hello");  // false
/[^a-z]/.test("Hello");  // true (ada "H")

// Bukan whitespace
/[^ \t\n]+/.test("halo"); // true

Karakter Khusus di Dalam Character Class

Di dalam [...], sebagian besar metacharacter kehilangan arti khususnya:

// Titik di dalam [] = titik literal (bukan wildcard)
/[.]/.test("3.14");   // true (cocok titik)
/[.]/.test("3x14");   // false ✓

// Tapi beberapa masih perlu di-escape:
// ] harus di-escape: [\]]
// \ harus di-escape: [\\]
// ^ hanya spesial di posisi pertama
// - hanya spesial di antara karakter (range)

Trik: letakkan - di awal atau akhir agar dianggap literal:

/[-abc]/.test("-");  // true (- literal di awal)
/[abc-]/.test("-");  // true (- literal di akhir)

Contoh Praktis

// Cek apakah string hanya berisi hex characters
const isHex = /^[0-9a-fA-F]+$/.test("1a2F3b");
console.log(isHex);  // true

// Cek karakter yang valid untuk username
const validUsername = /^[a-zA-Z0-9_]+$/.test("user_123");
console.log(validUsername);  // true

// Temukan semua konsonan
const konsonan = "belajar regex".match(/[^aeiou\s]/g);
console.log(konsonan);  // ["b", "l", "j", "r", "r", "g", "x"]

// Pisahkan berdasarkan karakter non-alfanumerik
const parts = "nama:umur;kota".split(/[^a-zA-Z]/);
console.log(parts);  // ["nama", "umur", "kota"]

Shorthand vs Character Class

Ingat bahwa shorthand seperti \d, \w, \s pada dasarnya adalah character class yang disingkat:

// Keduanya identik:
/[0-9]/.test("5");  // true
/\d/.test("5");     // true

// \w = [a-zA-Z0-9_]
// \s = [ \t\n\r\f\v]

Gunakan shorthand untuk kode yang lebih ringkas, dan character class custom saat kamu butuh kontrol lebih spesifik.

🎭 Analogi sehari-hari: Character class = daftar undangan VIP. [abc] = "boleh masuk kalau salah satu nama ini". [^abc] = "boleh masuk kalau BUKAN salah satu nama ini" (negasi). [a-z] = "siapa pun yang nama belakangnya antara A sampai Z". Bouncer cek satu karakter di pintu, sesuai daftar.

💡 Inside [...], metakarakter tenang: Hampir semua metakarakter (., *, +, dll) kehilangan makna khusus di dalam character class. [.] = titik literal, gak perlu escape. Cuma 4 yang masih spesial: ] (close bracket), \ (backslash), ^ (di awal = negasi), - (range, kecuali di ujung).

⚠️ Jebakan klasik:

🎯 Pattern umum:

TL;DR: Character class [...] = match satu karakter dari set. Range dengan -. Negasi [^...]. Inside [], metakarakter biasanya jadi literal. Shorthand \d \w \s = pendek + readable equivalent.

Yang akan kamu pelajari