2011-01-03 32 views
7

Tengo una variable que contiene algo de texto, algo de HTML, básicamente puede ser una cadena. Necesito buscar en la variable una cadena específica para procesar esa variable de manera diferente si está contenida. Aquí hay un fragmento de lo que estoy tratando de hacer, obviamente, no funciona :)jQuery ¿Buscar texto en una variable?

$.each(data.results, 
    function(i, results) { 
    var text = this.text     
    var pattern = new RegExp("^[SEARCHTERM]$"); 
    if(pattern.test(text)) 
    alert(text); //was hoping this would alert the SEARCHTERM if found... 
+0

¿Qué dice cuando haces una 'alerta (this.text)'? – ajreal

Respuesta

9

usted podría utilizar .indexOf() lugar para realizar la búsqueda.

Si no se encuentra la cadena, devuelve -1. Si se encuentra, devuelve el primer índice basado en cero donde se encuentra.

var text = this.text; 
var term = "SEARCHTERM"; 

if(text.indexOf(term) != -1) 
    alert(term); 

Si usted esperaba una coincidencia exacta, que el uso de ^ y $ parece dar a entender, sólo podía hacer una comparación ===.

var text = this.text; 
var term = "SEARCHTERM"; 

if(text === term) 
    alert(term); 

EDIT: Basado en su comentario, que desea una coincidencia exacta, pero === no está funcionando, mientras que es indexOf(). Este es a veces el caso si hay algunos espacios en blanco que deben recortarse.

Pruebe recortar los espacios en blanco usando jQuery's jQuery.trim() method.

var text = $.trim(this.text); 
var term = "SEARCHTERM"; 

if(text === term) 
    alert(term); 

Si esto no funciona, me gustaría recomendar la tala this.text a la consola para ver si es el valor que se espera.

+0

Gracias, entonces estoy buscando una coincidencia exacta con el término de búsqueda, pero la comparación === no pareció funcionar. Sin embargo, usar indexOf sí lo hace. ¿Por qué sería eso? – thatryan

+0

@thatryan: Dependería del valor de 'this.text'. Sin saber lo que 'data.results' tiene, no puedo decirlo con certeza, pero supongo que tal vez hay algunos espacios en blanco que deben recortarse.El 'indexOf()' localizará cualquier coincidencia parcial en la cadena, por lo que puede dar falsos positivos a veces, mientras que '===' fallará si hay alguna diferencia, incluido el espacio en blanco. Actualicé mi respuesta. – user113716

+0

@thatryan: ¿Obtuvieron este problema? – user113716

2

Si está utilizando una expresión regular para buscar una subcadena, se puede encontrar la combinación de esta manera:

var match = text.match(pattern); 
if(match) { 
    alert(match[0]); 
} 

consulte la documentación de .match() para más información.

Tenga en cuenta que si está intentando buscar la cadena "[SEARCHTERM]" (un término de búsqueda que contiene corchetes), su método de búsqueda no funcionará porque los corchetes tienen un significado especial dentro de las expresiones regulares. En su lugar, utilice .indexOf():

var index = text.indexOf("[SEARCHTERM]"); 
if(index != -1) { 
    alert("Search term found"); 
} 

Sin embargo, si usted está tratando de encontrar una coincidencia exacta (otra cosa que el término de búsqueda se encuentra en la cadena que está mirando), sólo debe comparar las cadenas:

if(text == "[SEARCHTERM]") { 
    alert("Search term found"); 
} 
0

¿Qué significa "no funciona" aquí?

Tenga en cuenta que debe utilizar llaves ({}) con if declaraciones. Algunos navegadores le permitirán perderlos, pero debe incluirlos para que sean correctos y para admitir todo.

+0

Ah, y te falta un punto y coma en la línea en la que inicias la variable 'prueba'. –

+0

* "Algunos navegadores le permitirán ..." * Excluirlos está realmente permitido por la especificación del idioma, pero sin duda es una buena práctica para incluirlos. – user113716

+1

@patrick dw: ¡Ah, vaya! Gracias por eso. Admito que siempre había supuesto; Aún así, los navegadores generalizados como IE6 no estarán contentos con su IME, así que mejor mantenerlos. –