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