2012-10-08 16 views
10

Actualmente estoy usando str.indexOf("word") para encontrar una palabra en una cadena. Pero el problema es que también devuelve partes de otras palabras.Javascript encontrar el índice de la palabra en una cadena (no parte de la palabra)

Ejemplo: "Fui al foobar y pedí foo". Quiero el primer índice de la palabra única "foo", no el foo dentro de foobar.

No puedo buscar "foo" porque a veces puede ir seguido de una coma completa o coma (cualquier carácter no alfanumérico).

+3

Tiene seis preguntas que no tienen respuestas aceptadas. Vuelve y acepta una respuesta y la gente estará dispuesta a publicarla. – jeremy

+0

Ok, gracias. No sabía que tenía una cuenta persistente como "user759885". Lo he hecho y lo he hecho. – user759885

Respuesta

18

Vas a tener que usar expresiones regulares para esto:

> '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/ partidos foo que está rodeado por los límites de palabra.

para que coincida con una palabra arbitraria, construir un objeto de RegExp:

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

Tuve un intento de crear un caso general, pero mi implementación no parece funcionar. 'reg = '/ \ b' + palabra + '\ b /'; str.indexOf (reg); ' – user759885

+0

Si quiere componer la expresión regular, necesita dos pasos: double scape the" \ "(" \\ b ") y llamar al constructor RegExp:' reg = new RegExp ("\\ b "+ palabra +" \\ b ");' –

+0

Ah, veo que indexOf no toma regex, por lo que ha usado 'search()'. Mi solución final fue usar 'reg = '\\ b (' + palabra + ') \\ b';' 'str.indexOf (reg);' – user759885

2

Para un caso general, utilice el constrcutor RegExp para crear la expresión regular delimitada por los límites de palabra:

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

Tenga en cuenta que los guiones se consideran límites de palabras, por lo que secarse al sol son dos palabras.

Cuestiones relacionadas