Ekspresi Reguler akan lebih optimal bagi banyak orang karena batasan kata \b
atau perangkat serupa. Batas kata terjadi ketika salah 0-9
, a-z
, A-Z
, _
berada di sisi dari pertandingan berikutnya, atau ketika menghubungkan karakter alfanumerik dengan garis atau tali akhir atau awal.
if (location.href.match(/(?:\b|_)franky(?:\b|_)))
Jika Anda menggunakan if(window.location.href.indexOf("sam")
, Anda akan mendapatkan kecocokan untuk flotsam
dan same
, di antara kata lain. tom
akan cocok dengan tomat dan besok, tanpa regex.
Membuatnya case-sensitive semudah menghapus i
.
Selanjutnya, menambahkan filter lain semudah
if (location.href.match(/(?:\b|_)(?:franky|bob|billy|john|steve)(?:\b|_)/i))
Mari kita bicarakan (?:\b|_)
. RegEx biasanya didefinisikan _
sebagai word character
sehingga tidak menyebabkan batas kata. Kami menggunakan ini (?:\b|_)
untuk menangani ini. Untuk melihat apakah ia menemukan \b
atau _
di kedua sisi string.
Bahasa lain mungkin perlu menggunakan sesuatu seperti
if (location.href.match(/([^\wxxx]|^)(?:franky|bob|billy|john|steve)([^\wxxx]|$)/i))
//where xxx is a character representation (range or literal) of your language's alphanumeric characters.
Semua ini lebih mudah daripada mengatakannya
var x = location.href // just used to shorten the code
x.indexOf("-sam-") || x.indexOf("-sam.") || x.indexOf(" sam,") || x.indexOf("/sam")...
// and other comparisons to see if the url ends with it
// more for other filters like frank and billy
Citarasa Regular Expressions bahasa lain mendukung \p{L}
tetapi javascript tidak, yang akan membuat tugas mendeteksi karakter asing lebih mudah. Sesuatu seperti[^\p{L}](filters|in|any|alphabet)[^\p{L}]
"window.location.contains is not a function"