Регулярні вирази будуть більш оптимальними для багатьох людей через межі слів \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"