Anchors — Regex

Apa itu Anchor? Anchor tidak mencocokkan karakter tertentu — mereka mencocokkan posisi di dalam string. Anchor memastikan pattern kamu ditemukan di lokasi…

Anchor gak mencocokkan karakter, dia mencocokkan posisi: awal teks, akhir teks, atau batas kata. Bayangin garis start dan garis finish di lintasan lari. Garisnya bukan pelari dan gak memakan jalan, dia cuma menandai tempat. ^ itu garis start, $ garis finish, dan \b garis di antara kata. Dengan anchor, pola gak cuma bilang "isinya apa", tapi juga "di mana".

🧪 Tebakan cepat: kode PO-0412 dan PO-0413 sama-sama ada di akhir baris chat. chat.match(/PO-\d{4}$/g) menemukan berapa: 1 atau 2? Tebak dulu, jawabannya ada di bagian "Flag m: tiap baris".

^ dan $: awal dan akhir teks

Anchor paling penting buat validasi isian form. Tanpa anchor, test() sudah puas kalau ada potongan yang cocok di mana saja.

const nomorSah = /^08\d{8,11}$/;

console.log(nomorSah.test("081298765432"));             // true
console.log(nomorSah.test("no saya 081298765432"));     // false
console.log(/08\d{8,11}/.test("no saya 081298765432")); // true
console.log(/^\d{5}$/.test("12345"), /^\d{5}$/.test("123456")); // true false

Anchor gak memakan karakter. /^[A-Z][a-z]*/ artinya "huruf besar di posisi pertama, lalu huruf kecil": .test("Ratna") menjawab true, .test("dina") menjawab false.

^ punya dua arti. Di luar kurung siku, dia anchor awal teks. Tepat setelah [, dia negasi: [^0-9].

Flag m: tiap baris

Chat kita punya 6 baris. Tanpa flag, ^ dan $ cuma awal dan akhir seluruh teks. Dengan flag m (multiline), keduanya berlaku di awal dan akhir tiap baris.

console.log(chat.match(/PO-\d{4}$/g));     // ['PO-0413']
console.log(chat.match(/PO-\d{4}$/gm));    // ['PO-0412', 'PO-0413']
console.log(chat.match(/^\[12/g).length);  // 1
console.log(chat.match(/^\[12/gm).length); // 6

Tanpa m, $ cuma cocok di akhir baris terakhir, jadi yang ketemu cuma PO-0413. PO-0412 ada di akhir baris pertama, dan itu bukan akhir teks. Itu jawaban tebakannya. Dengan m, dua-duanya ketemu, dan ^\[12 menemukan tanggal di awal keenam baris.

\b: batas kata

\b cocok di posisi antara karakter kata (\w: huruf, angka, garis bawah) dan karakter bukan kata, atau ujung teks.

console.log(chat.match(/\d{10}/g));      // ['1234567890', '0812987654']
console.log(chat.match(/\b\d{10}\b/g));  // ['1234567890']
console.log(chat.match(/nastar/gi));     // ['Nastar', 'nastar', 'NASTAR']
console.log(chat.match(/\bnastar\b/gi)); // ['Nastar', 'NASTAR']

⚠️ Jebakan yang sering ketemu

TL;DR: Anchor mencocokkan posisi, bukan karakter. ^ awal teks, $ akhir teks, \b batas antara karakter kata (\w) dan bukan kata. Validasi isian pakai ^...$ supaya seluruh teks yang dicek: /^\d{5}$/.test("12345") menjawab true, /^\d{5}$/.test("123456") menjawab false. Flag m membuat ^ dan $ berlaku di tiap baris. \b memisahkan nastar dari nastarnya dan nomor rekening dari potongan nomor HP, tapi gak memisahkan Rp dari 85. Jangan pakai flag g di regex untuk test(). ^ di luar kurung siku artinya awal; tepat setelah [ artinya negasi.

Yang akan kamu pelajari