Le espressioni regolari saranno più ottimali per molte persone a causa dei confini delle parole \bo 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 flotsame same, tra le altre parole. tomabbinerebbe 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 characterquindi non causa un limite di parole. Usiamo questo (?:\b|_)per affrontare questo. Per vedere se trova \bo _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"