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