Expressões regulares serão mais ideais para muitas pessoas devido a limites de palavras \b
ou dispositivos semelhantes. Limites de palavra ocorrer quando qualquer um 0-9
, a-z
, A-Z
, _
estão em que o lado do próximo jogo, ou quando um alfanuméricos Ligações personagem a linha ou fim string ou começando.
if (location.href.match(/(?:\b|_)franky(?:\b|_)))
Se você usar if(window.location.href.indexOf("sam")
, receberá correspondências para flotsam
e same
, entre outras palavras.tom
combinaria tomate e amanhã, sem regex.
Tornar a distinção entre maiúsculas e minúsculas é tão simples quanto remover o i
.
Além disso, adicionar outros filtros é tão fácil quanto
if (location.href.match(/(?:\b|_)(?:franky|bob|billy|john|steve)(?:\b|_)/i))
Vamos conversar (?:\b|_)
. RegEx normalmente define _
como um, word character
para que não cause um limite de palavras. Usamos isso (?:\b|_)
para lidar com isso. Para ver se encontra \b
ou_
em ambos os lados da cadeia.
Outros idiomas podem precisar usar algo como
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.
Tudo isso é mais fácil do que dizer
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
Os sabores de expressões regulares de outros idiomas são compatíveis, \p{L}
mas o javascript não, o que tornaria a tarefa de detectar caracteres estrangeiros muito mais fácil. Algo como[^\p{L}](filters|in|any|alphabet)[^\p{L}]
"window.location.contains is not a function"