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-0412danPO-0413sama-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
^di awal pola: cocoknya harus mulai dari awal teks.$di akhir pola: harus selesai tepat di akhir teks.- Dengan keduanya, seluruh isian harus cocok.
no saya 081298765432ditolak karena ada teks sebelum08. - Tanpa anchor, pola yang sama menerima isian itu, karena potongan
081298765432di dalamnya cocok. /^\d{5}$/cuma menerima tepat 5 angka:12345lolos,123456(6 angka) gak lolos.
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']
\d{10}ikut memotong 10 angka pertama dari nomor Sari081298765432. Dengan\bdi kedua sisi, 10 angka itu harus berdiri sendiri, jadi tinggal nomor rekening1234567890.\bnastar\bmenolaknastarnya, karena sesudahnastarmasih ada hurufn: gak ada batas di situ.- Angka juga karakter kata. Di
Rp85.000, antarapdan8gak ada batas, jadi/\b85\b/.test(chat)menjawabfalse. Begitu juga90di90rb.
⚠️ Jebakan yang sering ketemu
- Lupa anchor saat validasi.
/08\d{8,11}/.test("no saya 081298765432")menjawabtrue. Validasi isian selalu pakai^...$. ^dan$di teks banyak baris tanpam. Cuma baris pertama (buat^) dan baris terakhir (buat$) yang diperiksa.- Flag
gdi regex buattest(). Regex dengangmengingat posisi terakhirnya dilastIndex.const re = /^08\d{8,11}$/g, lalure.test()untuk tiga nomor yang sama-sama sah, memberitrue,false,true: tes kedua mulai mencari dari posisi 12, gagal, lalulastIndexkembali ke 0. Buat validasi, jangan pakaig. \bdan angka.\bgak melihat batas antara huruf dan angka, karena dua-duanya karakter kata.
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.