Les expressions régulières seront plus optimales pour beaucoup de gens en raison des limites de mots \b
ou d'appareils similaires. Limites de mots se produisent lorsque l' une 0-9
, a-z
, A-Z
, _
sont sur ce côté du prochain match, ou quand un Connects de caractères alphanumériques à la ligne ou à la fin de chaîne ou de commencer.
if (location.href.match(/(?:\b|_)franky(?:\b|_)))
Si vous utilisez if(window.location.href.indexOf("sam")
, vous obtiendrez des correspondances pour flotsam
et same
, entre autres. tom
correspondrait à la tomate et demain, sans regex.
Le rendre sensible à la casse est aussi simple que de supprimer le i
.
De plus, l'ajout d'autres filtres est aussi simple que
if (location.href.match(/(?:\b|_)(?:franky|bob|billy|john|steve)(?:\b|_)/i))
Parlons-en (?:\b|_)
. RegEx définit généralement _
comme un word character
afin qu'il ne provoque pas de limite de mot. Nous l'utilisons (?:\b|_)
pour y faire face. Pour voir s'il trouve \b
ou _
de chaque côté de la chaîne.
D'autres langues peuvent avoir besoin d'utiliser quelque chose comme
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.
Tout cela est plus facile que de dire
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
Les versions d'autres langues prennent en charge les expressions régulières, \p{L}
mais pas le javascript, ce qui faciliterait la tâche de détection des caractères étrangers. Quelque chose comme[^\p{L}](filters|in|any|alphabet)[^\p{L}]
"window.location.contains is not a function"