Karakter Literal & Escape — Regex

Karakter Literal Karakter literal adalah karakter yang cocok persis dengan dirinya sendiri. Huruf a di regex cocok dengan huruf a di teks, angka 5 cocok dengan

Karakter Literal

Karakter literal adalah karakter yang cocok persis dengan dirinya sendiri. Huruf a di regex cocok dengan huruf a di teks, angka 5 cocok dengan 5, dan seterusnya.

/halo/.test("halo dunia");  // true
/xyz/.test("halo dunia");   // false

Sebagian besar karakter (huruf, angka, spasi) bersifat literal. Tapi ada beberapa karakter yang punya arti khusus di regex.

Karakter Meta (Special Characters)

Karakter-karakter berikut punya arti khusus di regex dan disebut metacharacters:

. ^ $ * + ? { } [ ] ( ) | \

Masing-masing punya fungsi spesifik:

Karakter Arti
. Cocok dengan karakter apa saja (kecuali newline)
^ Awal string/baris
$ Akhir string/baris
* 0 atau lebih pengulangan
+ 1 atau lebih pengulangan
? 0 atau 1 (opsional)
| Atau (alternation)
() Grup
[] Character class
{} Jumlah pengulangan tertentu

Escape Character dengan Backslash

Jika kamu ingin mencocokkan karakter meta secara literal, tambahkan backslash (\) di depannya. Ini disebut escaping.

// Tanpa escape — titik cocok dengan KARAKTER APAPUN
/3.14/.test("3.14");  // true
/3.14/.test("3x14");  // true (titik = karakter apapun!)

// Dengan escape — titik cocok HANYA dengan titik
/3\.14/.test("3.14");  // true
/3\.14/.test("3x14");  // false ✓ benar!

Contoh Escaping yang Sering Dibutuhkan

// Mencocokkan harga dollar
/\$\d+/.test("Harga $50");  // true

// Mencocokkan tanda tanya
/benarkah\?/.test("benarkah?");  // true

// Mencocokkan path Windows
/C:\\Users/.test("C:\\Users");  // true (double escape!)

// Mencocokkan URL dengan titik
/google\.com/.test("google.com");  // true

Shorthand Character Classes

Backslash juga digunakan untuk membuat shorthand yang sangat berguna:

Pattern Arti Equivalen
\d Digit (angka) [0-9]
\D Bukan digit [^0-9]
\w Word character [a-zA-Z0-9_]
\W Bukan word character [^a-zA-Z0-9_]
\s Whitespace [ \t\n\r\f\v]
\S Bukan whitespace [^ \t\n\r\f\v]
\b Word boundary -
const kalimat = "Saya punya 3 kucing dan 12 ikan";

// Temukan semua angka
console.log(kalimat.match(/\d+/g));  // ["3", "12"]

// Temukan semua kata (huruf/angka berturut)
console.log(kalimat.match(/\w+/g));
// ["Saya", "punya", "3", "kucing", "dan", "12", "ikan"]

// Temukan yang dipisahkan whitespace
console.log("halo\tdunia\nbaru".match(/\S+/g));
// ["halo", "dunia", "baru"]

Titik (Dot) — Wildcard

Karakter . (dot) cocok dengan karakter apa saja kecuali newline (\n):

/h.t/.test("hat");  // true
/h.t/.test("hot");  // true
/h.t/.test("hit");  // true
/h.t/.test("h\nt"); // false (newline tidak cocok)

Ini sangat berguna saat kamu tahu posisi karakter tapi tidak peduli karakter apa isinya.

🎭 Analogi sehari-hari: Karakter literal vs metakarakter = bahasa biasa vs simbol khusus. "Stop" = literal kata. Tanda berhenti merah = simbol khusus dengan makna. Di regex, stop = cari kata "stop", . = cari karakter apapun. Mau cari titik literal? Pakai \. (escape).

💡 Trik hafal metacharacter: . ^ $ * + ? { } [ ] ( ) | \ = total 12 metakarakter. Kalau gak yakin escape atau gak, selalu escape pakai \\.\@\$ aman walau gak perlu, gak akan break. Beberapa dialect punya tools regex.escape() untuk auto-escape user input.

⚠️ Jebakan klasik:

🎯 Shorthand cheat:

TL;DR: Metakarakter = 12 simbol berfungsi khusus. Escape dengan \ untuk literal. Shorthand class (\d \w \s) = pendek + readable. \b[\b]. Saat ragu, escape — lebih aman.