Le espressioni regolari saranno più ottimali per molte persone a causa dei confini delle parole \b
o di dispositivi simili. Limiti delle parole si verificano quando una delle 0-9
, a-z
, A-Z
, _
sono su quel lato della prossima partita, o quando un collega alfanumerici carattere alla linea o alla fine della stringa o all'inizio.
if (location.href.match(/(?:\b|_)franky(?:\b|_)))
Se lo usi if(window.location.href.indexOf("sam")
, otterrai corrispondenze per flotsam
e same
, tra le altre parole. tom
abbinerebbe pomodoro e domani, senza regex.
Renderlo sensibile al maiuscolo / minuscolo è semplice come rimuovere il i
.
Inoltre, aggiungere altri filtri è facile come
if (location.href.match(/(?:\b|_)(?:franky|bob|billy|john|steve)(?:\b|_)/i))
Parliamo di (?:\b|_)
. RegEx in genere definisce _
come word character
quindi non causa un limite di parole. Usiamo questo (?:\b|_)
per affrontare questo. Per vedere se trova \b
o _
su entrambi i lati della stringa.
Altre lingue potrebbero aver bisogno di usare qualcosa di simile
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.
Tutto questo è più facile che 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
Le versioni di espressioni regolari di altre lingue supportano, \p{L}
ma javascript no, il che renderebbe molto più semplice il compito di rilevare caratteri stranieri. Qualcosa di simile a[^\p{L}](filters|in|any|alphabet)[^\p{L}]
"window.location.contains is not a function"