2012-10-08 10 views
10

Attualmente sto usando str.indexOf("word") per trovare una parola in una stringa. Ma il problema è che restituisce anche parti di altre parole.Javascript cerca l'indice della parola in stringa (non fa parte della parola)

Esempio: "Sono andato al foobar e ho ordinato il foo". Voglio il primo indice della singola parola "foo", non il foo all'interno di foobar.

Non riesco a cercare "pippo" perché a volte potrebbe essere seguito da un punto o virgola (qualsiasi carattere non alfanumerico).

+3

Hai sei domande che non hanno accettato risposte. Torna indietro e accetta una risposta e le persone saranno disposte a postare su questo. – jeremy

+0

Ok, grazie non sapevo di avere un account persistente come "user759885", l'ho passato e l'ho fatto. – user759885

risposta

18

Dovrete usare regex per questo:

> 'I went to the foobar and ordered foo.'.indexOf('foo') 
14 
> 'I went to the foobar and ordered foo.'.search(/\bfoo\b/) 
33 

/\bfoo\b/ partite foo che è circondato da confini di parola.

per abbinare una parola arbitraria, costruire un oggetto RegExp:

> var word = 'foo'; 
> var regex = new RegExp('\\b' + word + '\\b'); 
> 'I went to the foobar and ordered foo.'.search(regex); 
33 
+0

Ho provato a fare un caso generale ma la mia implementazione non sembra funzionare. 'reg = '/ \ b' + word + '\ b /'; str.indexOf (reg); ' – user759885

+0

Se si desidera comporre la regex sono necessari due passaggi: doppio scape" \ "(" \\ b ") e chiamare il costruttore RegExp:' reg = new RegExp ("\\ b "+ word +" \\ b ");' –

+0

Ah, vedo indexOf non ha espressioni regolari quindi hai usato 'search()'. La mia soluzione finale era usare 'reg = '\\ b (' + word + ') \\ b';' 'str.indexOf (reg);' – user759885

2

Per un caso generale, utilizzare il constrcutor RegExp per creare l'espressione regolare delimitata da confini di parola:

function matchWord(s, word) { 
    var re = new RegExp('\\b' + word + '\\b'); 
    return s.match(re); 
} 

noti che i trattini sono considerati dei confini delle parole, quindi le parole essiccate al sole sono due parole.

Problemi correlati