Pattern /kopi/ pada chapter sebelumnya hanya cocok dengan kata “kopi” — pencarian teks biasa dengan seragam baru. Kekuatan regex yang sesungguhnya terletak pada kosakata pattern: kumpulan simbol yang mendeskripsikan bentuk teks, bukan teksnya. Setelah chapter ini, kita bisa menuliskan aturan seperti “ORD diikuti tanda hubung lalu satu atau lebih angka” dalam satu baris pattern.

Kosakata itu terbagi enam perkakas: character class, quantifier, anchor, capturing group, alternation, dan escape karakter spesial. Kita bedah satu per satu, lalu merangkainya pada studi kasus log gudang.

Character Class: Satu Karakter dari Sekumpulan Pilihan #

Aturan character class: tanda kurung siku [...] berarti “salah satu karakter dari kumpulan ini”. [0-9] cocok dengan satu digit, [a-z] dengan satu huruf kecil, dan [aeiou] dengan satu huruf vokal. Tanda ^ yang ditulis di awal kumpulan membalik maknanya: [^0-9] cocok dengan satu karakter yang bukan angka. Perhatikan bahwa ^ di dalam kurung siku ini berbeda makna dengan anchor ^ yang akan kita bahas beberapa bagian lagi.

js
const kode = "ORD-8";
console.log(/ORD-[0-9]/.test(kode));
console.log(/[aeiou]/.test("sky"));
console.log(/[aeiou]/.test("kopi"));
console.log(/[^0-9]/.test("882"));
console.log(/[^0-9]/.test("88a"));

Output yang Dihasilkan:

text
true
false
true
false
true

Mekanismenya: satu character class menampung tepat satu karakter. Pattern /ORD-[0-9]/ berarti “ORD-” diikuti satu digit apa pun, sehingga "ORD-8" lolos. Karena regex memindai seluruh string, /[^0-9]/ pada "882" tidak menemukan satu pun karakter non-angka dan menghasilkan false; pada "88a", huruf a ditemukan dan hasilnya true.

Quantifier: Berapa Kali Kemunculan #

Character class mengurus karakter mana yang cocok; quantifier mengurus berapa banyak. Quantifier ditempelkan tepat setelah karakter, class, atau group yang ingin diulang:

QuantifierArtiContoh
{n}tepat n kali[0-9]{3} — tiga digit
{n,}n kali atau lebih[0-9]{2,} — dua digit ke atas
{n,m}antara n sampai m kali[a-z]{3,5} — tiga sampai lima huruf
+satu kali atau lebih (sama dengan {1,})[0-9]+
*nol kali atau lebih (sama dengan {0,})[0-9]*
?nol atau satu kali (sama dengan {0,1})go?al
js
console.log(/[0-9]{3}/.test("ab123"));
console.log(/[0-9]{3}/.test("ab12"));
console.log(/go?al/.test("gal"));
console.log(/go?al/.test("goal"));
console.log(/go?al/.test("gool"));

Output yang Dihasilkan:

text
true
false
true
true
false

Tanpa quantifier, [0-9] hanya menampung satu digit; quantifier {3} membuatnya menampung tiga digit berurutan, sehingga "ab123" lolos sementara "ab12" ditolak. Pada pola go?al, tanda ? membuat huruf o boleh hadir atau tidak: "gal" dan "goal" sama-sama lolos, tetapi "gool" ditolak karena huruf o berganda.

Anchor ^ dan $: Menempel di Ujung #

Tanda ^ menandai awal string, dan $ menandai akhir string. Tanpa anchor, regex mencari kecocokan di posisi mana pun; dengan keduanya, seluruh string harus cocok dari ujung ke ujung. Bentuk inilah yang nanti dipakai untuk validasi format di chapter Regex Validation.

js
console.log(/kopi/.test("pelanggan suka kopi"));
console.log(/^kopi$/.test("pelanggan suka kopi"));
console.log(/^kopi$/.test("kopi"));
console.log(/kopi$/.test("sisa kopi"));
console.log(/^kopi$/.test("Kopi"));

Output yang Dihasilkan:

text
true
false
true
true
false
  1. Baris 1: tanpa anchor, kata “kopi” ditemukan di tengah kalimat.
  2. Baris 2: ^kopi$ menuntut seluruh string berbunyi “kopi”, sehingga kalimat panjang ditolak.
  3. Baris 3: string yang persis “kopi” lolos.
  4. Baris 4: cukup $ — string yang diakhiri “kopi” tetap lolos.
  5. Baris 5: ditolak karena huruf K kapital; pencarian regex peka huruf besar-kecil, dan solusinya adalah flag i di chapter berikutnya.

Group ( ) dan Alternation | #

Tanda pipa | berarti “atau”: /sukses|tertunda|gagal/ cocok dengan salah satu dari ketiga kata itu. Tanda kurung ( ) membentuk group dengan dua fungsi sekaligus. Fungsi pertama mengelompokkan: kurung membatasi jangkauan | — bandingkan /^(ya|tidak)$/ yang menuntut seluruh string berbunyi “ya” atau “tidak” dengan /ya|tidak/ yang kecocokannya bebas di posisi mana pun. Fungsi kedua menangkap: bagian kecocokan yang berada di dalam kurung disimpan terpisah (capturing group) dan bisa dibaca dari hasil exec.

js
const polaStatus = /sukses|tertunda|gagal/;
console.log(polaStatus.test("Paket tertunda di gudang"));
console.log(/^(ya|tidak)$/.test("yah"));
const cocok = /kode ([0-9]+)/.exec("pesanan dengan kode 4507 keluar");
console.log(cocok[0]);
console.log(cocok[1]);

Output yang Dihasilkan:

text
true
false
kode 4507
4507
  1. Baris 2: alternation menemukan kata “tertunda” di tengah teks.
  2. Baris 3: kurung membuat kedua pilihan diapit anchor; "yah" ditolak karena huruf h lebih di akhir.
  3. Baris 4: pattern meminta teks “kode " diikuti capturing group ([0-9]+) — satu digit atau lebih yang ditangkap.
  4. Baris 5 (cocok[0]): seluruh kecocokan, yaitu "kode 4507".
  5. Baris 6 (cocok[1]): isi capturing group pertama, yaitu "4507" tanpa awalannya — inilah cara mengambil bagian tertentu dari teks yang lebih panjang.

Escape Karakter Spesial #

Simbol-simbol tadi — titik . dan juga ^ $ * + ? ( ) [ ] { } | \ — adalah karakter spesial (meta characters) yang memiliki tugas pattern. Titik paling sering menipu pemula: ia cocok dengan karakter apa pun, bukan hanya titik sungguhan. Untuk mencari karakter spesial secara harfiah, beri garis miring terbalik di depannya.

js
console.log(/25.000/.test("Rp25x000"));
console.log(/25\.000/.test("Rp25x000"));
console.log(/25\.000/.test("Rp25.000"));

Output yang Dihasilkan:

text
true
false
true

Baris pertama lolos meskipun huruf x menggantikan titik — bukti bahwa . cocok dengan karakter apa pun. Setelah titik di-escape menjadi \., pattern hanya menerima titik sungguhan: "Rp25x000" ditolak dan "Rp25.000" diterima. Ingat pula pelajaran chapter Regular Expressions: di dalam new RegExp berbentuk string, garis miring terbalik ini harus ditulis ganda menjadi \\..

Studi Kasus: Membaca Log Gudang #

Sekarang kita rangkai kosakata pattern dalam satu berkas. Log gudang berisi status pengiriman dan kode pesanan; tugasnya: mengenali status, mengumpulkan semua angka tiga digit, memeriksa bentuk kode secara ketat, dan menangkap angkanya.

js pola-dasar.js
// pola-dasar.js
// Siti mengenali kode dan status pengiriman di log gudang dengan pattern regex.

const log = "Pengiriman ORD-882 sukses. Gudang B memproses ORD-105.";

// 1. Alternation: salah satu dari beberapa kata
const polaStatus = /sukses|tertunda|gagal/;
console.log(polaStatus.test(log));

// 2. Character class + quantifier: kumpulan semua angka tiga digit
const temuan = log.match(/[0-9]{3}/g);
console.log(temuan);

// 3. Anchor: string harus berbentuk ORD- diikuti angka, dari awal sampai akhir
const polaKode = /^ORD-[0-9]+$/;
console.log(polaKode.test("ORD-882"));
console.log(polaKode.test("ORD-882A"));
console.log(polaKode.test("Gudang ORD-105"));

// 4. Capturing group: mengambil bagian di dalam tanda kurung
const polaNomor = /^ORD-([0-9]+)$/;
const cocok = polaNomor.exec("ORD-105");
console.log(cocok[0]);
console.log(cocok[1]);

Output yang Dihasilkan:

text
true
[ '882', '105' ]
true
false
false
ORD-105
105

Jalankan dengan node pola-dasar.js dan cocokkan hasilnya. Mari kita telaah baris-baris pentingnya:

  1. Baris 7 (/sukses|tertunda|gagal/): alternation menjawab true karena kata “sukses” ada di dalam log.
  2. Baris 11 (log.match(/[0-9]{3}/g)): character class dan quantifier bekerja sama mengumpulkan angka tiga digit; huruf g pada akhirnya memerintahkan pengumpulan semua kecocokan — detailnya menunggu di chapter berikutnya.
  3. Baris 15 (/^ORD-[0-9]+$/): anchor mengikat format dari awal sampai akhir; + menuntut minimal satu digit.
  4. Baris 16–18: "ORD-882" lolos; "ORD-882A" ditolak karena huruf A setelah angka; "Gudang ORD-105" ditolak karena string tidak dimulai dengan “ORD-”.
  5. Baris 21–24: capturing group menangkap bagian angkanya, sehingga cocok[1] berisi "105" tanpa awalan "ORD-".

Enam perkakas pattern sudah lengkap, tetapi semua contoh di chapter ini baru mencari kecocokan pertama atau memakai huruf g tanpa penjelasan. Chapter berikutnya membahas flag — pengatur yang menentukan apakah regex mencari semua kecocokan, mengabaikan kapitalisasi, atau bekerja per baris.

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

pola-dasar.js

Unduh berkas
javascript
// pola-dasar.js
// Siti mengenali kode dan status pengiriman di log gudang dengan pattern regex.

const log = "Pengiriman ORD-882 sukses. Gudang B memproses ORD-105.";

// 1. Alternation: salah satu dari beberapa kata
const polaStatus = /sukses|tertunda|gagal/;
console.log(polaStatus.test(log));

// 2. Character class + quantifier: kumpulan semua angka tiga digit
const temuan = log.match(/[0-9]{3}/g);
console.log(temuan);

// 3. Anchor: string harus berbentuk ORD- diikuti angka, dari awal sampai akhir
const polaKode = /^ORD-[0-9]+$/;
console.log(polaKode.test("ORD-882"));
console.log(polaKode.test("ORD-882A"));
console.log(polaKode.test("Gudang ORD-105"));

// 4. Capturing group: mengambil bagian di dalam tanda kurung
const polaNomor = /^ORD-([0-9]+)$/;
const cocok = polaNomor.exec("ORD-105");
console.log(cocok[0]);
console.log(cocok[1]);