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:
- Lupa escape
.=email\.comjadi cocok "emailxcom" juga - Double-escape di string literal —
"\d"di JS string =\ddi regex. Lebih clean:/\d/literal \bdi character class = beda makna![\b]= backspace, bukan word boundary\scocok newline — bukan cuma spasi. Awas saat parse line by line- Greedy
.*saat butuh literal*— escape jadi\*
🎯 Shorthand cheat:
\d= digit,\D= bukan digit\w= word char (huruf+angka+_),\W= bukan\s= whitespace,\S= bukan\b= word boundary (transisi word ↔ non-word).= apapun kecuali newline (gunakan/.../sflag untuk include newline)
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.