Kembali ke Blog|Tutorial12 Mei 2026

Memahami Regex: Lookahead dan Lookbehind (Advanced)

🧠Oleh CED
10 menit membaca
Memahami Regex

Banyak developer merasa sudah mahir Regular Expression (Regex) — sampai mereka dihadapkan pada tugas: "Temukan kata 'Apple' HANYA JIKA diikuti oleh kata 'Pie', tetapi jangan masukkan kata 'Pie' ke dalam hasil pencarian." Di sinilah Lookahead dan Lookbehind menyelamatkan hari Anda.

Konsep ini disebut Lookaround Assertions — sebuah fitur lanjutan regex yang memungkinkan Anda membuat kondisi keberadaan teks di sekitar posisi match, tanpa ikut "memakan" teks kondisi tersebut ke dalam hasil. Artikel ini membahas keempat jenis Lookaround beserta kasus penggunaan nyata yang akan langsung berguna dalam pekerjaan Anda sehari-hari.

💡 Konsep Dasar: Apa Arti "Zero-Width"?

Sebelum membahas Lookaround, kita perlu memahami konsep kunci: Zero-Width Match. Regex biasa seperti \d+ ketika cocok dengan "123", ia "memakan" 3 karakter tersebut — artinya posisi kursor regex bergerak 3 langkah ke kanan.

Lookaround adalah asersisi zero-width — ia mengecek apakah sesuatu ada atau tidak ada di sekitar posisi saat ini, tetapi tidak menggerakkan kursor. Ibarat mengintip ke jendela tanpa masuk ke dalam rumah. Inilah yang membuatnya sangat powerful untuk kondisi kompleks.

Ringkasan Keempat Jenis Lookaround

TipeSintaksArtinya
Positive LookaheadX(?=Y)Temukan X jika DIIKUTI Y
Negative LookaheadX(?!Y)Temukan X jika TIDAK diikuti Y
Positive Lookbehind(?<=Y)XTemukan X jika DIDAHULUI Y
Negative Lookbehind(?<!Y)XTemukan X jika TIDAK didahului Y

1. Positive Lookahead (?=...)

Positive Lookahead mengintip ke depan untuk memastikan bahwa suatu pola BENAR-BENAR ADA setelah posisi saat ini, tetapi tidak menyertakan pola tersebut ke dalam hasil match.

  • Sintaks: X(?=Y) — Temukan X, hanya jika diikuti oleh Y
  • Contoh Kasus: Mencari kata "Java" hanya jika diikuti oleh "Script"
  • Regex: Java(?=Script)
  • Teks: "Saya belajar Java dan JavaScript."
  • Hasil Match: Kata "Java" yang kedua (di dalam kata JavaScript). "Java" pertama tidak cocok karena tidak diikuti "Script".
// JavaScript
const str = "Saya belajar Java dan JavaScript.";
const matches = str.match(/Java(?=Script)/g);
console.log(matches); // ["Java"]  — hanya yang di dalam "JavaScript"

2. Negative Lookahead (?!...)

Kebalikan dari Positive Lookahead. Ini memastikan bahwa suatu pola TIDAK ADA setelah posisi saat ini. Sangat berguna untuk filter eksklusif.

  • Sintaks: X(?!Y) — Temukan X, hanya jika TIDAK diikuti oleh Y
  • Contoh Kasus: Temukan "Mac" hanya jika tidak diikuti oleh "Book"
  • Regex: Mac(?!Book)
  • Teks: "Saya punya Mac Pro dan MacBook."
  • Hasil Match: Kata "Mac" yang pertama (Mac Pro). MacBook tidak cocok.

3. Positive Lookbehind (?<=...)

Lookbehind mengintip ke belakang (sebelum posisi saat ini). Positive Lookbehind memastikan bahwa pola tertentu ADA persis sebelum titik pencocokan. Kasus penggunaan klasiknya adalah mengekstrak angka tanpa simbol mata uang.

  • Sintaks: (?<=Y)X — Temukan X, hanya jika didahului oleh Y
  • Contoh Kasus: Mengambil nominal harga tanpa mengambil simbol Dollar
  • Regex: (?<=\$)\d+
  • Teks: "Harga baju $100 dan celana €50."
  • Hasil Match: "100" — tanpa tanda $. Angka 50 tidak cocok karena didahului Euro.
// JavaScript
const text = "Harga baju $100 dan celana €50.";
const prices = text.match(/(?<=$)d+/g);
console.log(prices); // ["100"]

4. Negative Lookbehind (?<!...)

Negative Lookbehind memastikan bahwa pola tertentu TIDAK ADA sebelum titik pencocokan. Ini berguna untuk menghindari pencocokan substring dalam kata yang lebih panjang.

  • Sintaks: (?<!Y)X — Temukan X, hanya jika TIDAK didahului oleh Y
  • Contoh Kasus: Menemukan kata "cat" yang bukan bagian dari kata "tomcat"
  • Regex: (?<!tom)cat
  • Teks: "tomcat and my cat"
  • Hasil Match: Kata "cat" yang kedua saja.

🔐 Kasus Nyata: Validasi Password Kompleks

Salah satu penggunaan Lookaround paling populer adalah validasi password kompleks yang mewajibkan banyak syarat sekaligus. Misalnya: "Minimal 8 karakter, harus ada huruf besar, huruf kecil, angka, dan karakter khusus."

// Regex validasi password kompleks
const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;

// Penjelasan:
// (?=.*[a-z])     → harus ada minimal 1 huruf kecil
// (?=.*[A-Z])     → harus ada minimal 1 huruf besar
// (?=.*\d)        → harus ada minimal 1 angka
// (?=.*[@$!%*?&]) → harus ada minimal 1 simbol khusus
// [A-Za-z\d@...]{8,} → total minimal 8 karakter

passwordRegex.test("weak");         // false
passwordRegex.test("StrongP@ss1"); // true

Keempat Positive Lookahead di awal berfungsi sebagai "aturan" yang mengintip ke seluruh string tanpa memakan karakter. Lalu bagian [A-Za-z...]{8,} baru benar-benar memvalidasi panjangnya.

📌 Kasus Nyata Lainnya

Ekstrak URL tanpa protokol

(?<=https?://)[^\s]+

Mengambil domain dari URL tanpa menyertakan "https://" atau "http://" di hasil.

Temukan kata sebelum titik koma

\w+(?=;)

Berguna untuk parsing kode sumber atau file konfigurasi.

Temukan angka yang bukan harga

(?<!\$)\b\d+\b

Cocok dengan angka yang tidak didahului simbol Dollar — berguna untuk laporan keuangan.


Latihan Regex Sekarang!

Membaca teori regex tidak akan pernah cukup. Anda harus mencobanya langsung dengan real-time highlighting. Gunakan Regex Tester kami untuk bereksperimen dengan pola Lookaround Anda!

Buka Regex Tester Gratis

Kesimpulan

Meskipun sintaksnya terlihat mengintimidasi pada awalnya — (?=...), (?<=...), (?!...), (?<!...) — Lookaround adalah senjata paling ampuh yang membedakan programmer biasa dari master Regex. Ingat aturan utamanya:

  • Lookaround selalu zero-width — tidak menggerakkan posisi match
  • Lookahead melihat ke depan, Lookbehind melihat ke belakang
  • Positive mensyaratkan keberadaan, Negative mensyaratkan ketidakhadiran
  • Gunakan untuk kondisi kompleks yang tidak bisa diekspresikan dengan pola biasa

Dengan menguasai keempat jenis Lookaround ini, Anda akan mampu membangun validator, parser, dan text processor yang jauh lebih powerful dan presisi daripada sebelumnya.