Las expresiones regulares serán más óptimas para muchas personas debido a los límites de palabras \b
o dispositivos similares. Límites de las palabras se producen cuando cualquiera de 0-9
, a-z
, A-Z
, _
están en ese lado del partido, o cuando un carácter alfanumérico se conecta a la línea o al final o al principio de cadena.
if (location.href.match(/(?:\b|_)franky(?:\b|_)))
Si lo usa if(window.location.href.indexOf("sam")
, obtendrá coincidencias para , flotsam
y same
entre otras palabras. tom
coincidiría con tomate y mañana, sin expresiones regulares.
Hacerlo sensible a mayúsculas y minúsculas es tan simple como eliminar el i
.
Además, agregar otros filtros es tan fácil como
if (location.href.match(/(?:\b|_)(?:franky|bob|billy|john|steve)(?:\b|_)/i))
Hablemos de eso (?:\b|_)
. RegEx generalmente se define _
como un, word character
por lo que no causa un límite de palabra. Usamos esto (?:\b|_)
para lidiar con esto. Para ver si encuentra \b
o _
a ambos lados de la cadena.
Otros idiomas pueden necesitar 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.
Todo esto es más fácil que decir
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
Los sabores de otros idiomas de las expresiones regulares son compatibles, \p{L}
pero javascript no, lo que facilitaría la tarea de detectar caracteres extranjeros. Algo como[^\p{L}](filters|in|any|alphabet)[^\p{L}]
"window.location.contains is not a function"