Escape Karakter Khusus dalam Regex JavaScript
Misalkan kita ingin membuat karakter khusus mewakili dirinya sendiri. Untuk itu, karakter tersebut perlu di-escape menggunakan backslash. Mari kita lihat contohnya.
Contoh
Dalam contoh berikut, penulis regex ingin
pola pencarian terlihat seperti: huruf
'a', lalu tanda plus '+', lalu
huruf 'x'. Namun, penulis kode
tidak meng-escape karakter '+' sehingga
pola pencarian sebenarnya terlihat seperti:
huruf 'a' satu kali atau lebih, lalu
huruf 'x':
let str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');
Hasilnya, yang tersimpan di variabel adalah:
'a+x ! ! !'
Contoh
Sekarang penulis meng-escape tanda plus dengan
backslash. Sekarang pola pencarian terlihat
seperti yang diinginkan: huruf 'a', lalu tanda plus
'+', lalu huruf 'x'.
let str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');
Hasilnya, yang tersimpan di variabel adalah:
'! ax aax aaax'
Contoh
Dalam contoh ini, polanya terlihat seperti: huruf
'a', lalu titik '.', lalu
huruf 'x':
let str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');
Hasilnya, yang tersimpan di variabel adalah:
'! abx azx'
Contoh
Dalam contoh berikut, penulis lupa meng-escape titik dan semua substring yang cocok tergantikan, karena titik yang tidak di-escape mewakili karakter apa pun:
let str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');
Hasilnya, yang tersimpan di variabel adalah:
'! ! !'
Catatan
Perhatikan bahwa jika Anda lupa backslash untuk titik (ketika seharusnya mewakili dirinya sendiri) - ini mungkin tidak terlihat:
'a.x'.replace(/a.x/g, '!'); // mengembalikan '!', seperti yang kita inginkan
Secara visual berjalan dengan benar (karena titik
mewakili karakter apa pun, termasuk titik biasa
'.'). Tetapi jika string yang diganti
diubah - kita akan melihat kesalahan kita:
'a.x abx azx'.replace(/a.x/g, '!'); // mengembalikan '! ! !', sedangkan yang diharapkan '! abx azx'
Daftar karakter khusus dan biasa
Jika meng-escape karakter biasa - tidak ada masalah - karakter tersebut tetap akan mewakili dirinya sendiri. Pengecualian - angka, angka tidak dapat di-escape.
Seringkali muncul keraguan, apakah suatu karakter adalah karakter khusus. Beberapa sampai pada titik meng-escape semua karakter yang mencurigakan secara berurutan. Namun, ini adalah praktik yang buruk (mengacaukan regex dengan backslash).
Termasuk karakter khusus: $ ^ . * + ? \
/ {} [] () |
Bukan karakter khusus: @ : , ' " ;
- _ = < > % # ~ `& !
Tugas Praktis
Diberikan string:
let str = 'a.a aba aea';
Tuliskan regex yang akan menemukan string
'a.a', tanpa mengambil yang lainnya.
Diberikan string:
let str = '2+3 223 2223';
Tuliskan regex yang akan menemukan string
'2+3', tanpa mengambil yang lainnya.
Diberikan string:
let str = '23 2+3 2++3 2+++3 345 567';
Tuliskan regex yang akan menemukan string
'2+3', '2++3', '2+++3',
tanpa mengambil yang lainnya (+ bisa berapa pun
jumlahnya).
Diberikan string:
let str = '23 2+3 2++3 2+++3 445 677';
Tuliskan regex yang akan menemukan string
'23', '2+3', '2++3',
'2+++3', tanpa mengambil yang lainnya.
Diberikan string:
let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
Tuliskan regex yang akan menemukan string
'*q+', '*qq+', '*qqq+',
tanpa mengambil yang lainnya.
Diberikan string:
let str = '[abc] {abc} abc (abc) [abc]';
Tuliskan regex yang akan menemukan string
dalam kurung siku dan menggantinya dengan '!'.