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