การแสดงออกปกติจะเหมาะสมที่สุดสำหรับผู้คนจำนวนมากเนื่องจากขอบเขตของคำ\b
หรืออุปกรณ์ที่คล้ายกัน ขอบเขตของคำเกิดขึ้นเมื่อใด ๆ0-9
, a-z
, A-Z
, _
ที่อยู่บนฝั่งของการแข่งขันต่อไปหรือเมื่อมีการเชื่อมต่อตัวอักษรและตัวเลขกับสายหรือจุดสิ้นสุดสตริงหรือจุดเริ่มต้น
if (location.href.match(/(?:\b|_)franky(?:\b|_)))
หากคุณใช้if(window.location.href.indexOf("sam")
คุณจะได้รับการจับคู่flotsam
และsame
ในคำอื่น ๆ tom
จะจับคู่มะเขือเทศและวันพรุ่งนี้โดยไม่ต้อง regex
ทำให้มันเป็นกรณี ๆ i
ไปเป็นง่ายๆเป็นลบ
เพิ่มเติมการเพิ่มตัวกรองอื่น ๆ เป็นเรื่องง่ายเหมือน
if (location.href.match(/(?:\b|_)(?:franky|bob|billy|john|steve)(?:\b|_)/i))
มาพูดถึง(?:\b|_)
กัน RegEx มักจะนิยาม_
ว่าเป็นword character
ดังนั้นจึงไม่ทำให้เกิดขอบเขตของคำ เราใช้สิ่งนี้(?:\b|_)
เพื่อจัดการกับสิ่งนี้ เพื่อดูว่ามันค้นพบ\b
หรือ_
ทั้งสองด้านของสตริง
ภาษาอื่นอาจจำเป็นต้องใช้สิ่งที่ต้องการ
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.
ทั้งหมดนี้ง่ายกว่าการพูด
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
การรองรับ Regular Expressions ของภาษาอื่น\p{L}
นั้นไม่รองรับjavascript ซึ่งจะทำให้การตรวจจับตัวอักษรต่างประเทศง่ายขึ้นมาก สิ่งที่ต้องการ[^\p{L}](filters|in|any|alphabet)[^\p{L}]
"window.location.contains is not a function"