Регулярні вирази будуть більш оптимальними для багатьох людей через межі слів \b
або подібні пристрої. Межі слова виникають , коли який - або з 0-9
, a-z
, A-Z
, _
знаходяться на тій стороні , на наступний матч, або коли буквено - цифровий підключається до символьні рядки або кінець рядка або початок.
if (location.href.match(/(?:\b|_)franky(?:\b|_)))
Якщо ви користуєтесь if(window.location.href.indexOf("sam")
, ви отримаєте сірники flotsam
і same
, серед інших слів. tom
відповідав би томатів і завтра, без регулярного вираження.
Зробити це чутливим до регістру так само просто, як і видалення 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
Підтримка регулярних виразів інших мов підтримує, \p{L}
але JavaScript не робить, що значно спростить завдання виявлення іноземних символів. Щось на зразок[^\p{L}](filters|in|any|alphabet)[^\p{L}]
"window.location.contains is not a function"