2009-08-07 30 views
13

Estoy tratando de encontrar si una imagen tiene en su nombre fuente noPic que puede estar en mayúscula o minúscula.JavaScript indexOf para ignorar el caso

var noPic = largeSrc.indexOf("nopic"); 

debo escribir:

var noPic = largeSrc.toLowerCase().indexOf("nopic"); 

Pero esta solución no funciona ...

+0

¿Qué es largeSrc? ¿Estás seguro de que es una cadena? –

+0

Utilice el depurador. Establezca un punto de interrupción en la línea 'var noPic = ...' y vea cuál es el tipo y el valor de 'largeSrc'. O puede poner 'console.log (typeof largeSrc, largeSrc);' antes de su línea. Pero a partir de la pregunta, parece que no está familiarizado con el depurador de JavaScript interactivo en su navegador. Recomiendo familiarizarse con esto. Por ejemplo: [Chrome DevTools tutorial] (https://developer.chrome.com/devtools). –

Respuesta

21

Puede utilizar expresiones regulares con un modificador de mayúsculas y minúsculas - es cierto que no necesariamente tan rápido como indexOf.

var noPic = largeSrc.search(/nopic/i); 
+6

De acuerdo con: http://jsperf.com/regex-vs-tolowercase-then-regex/2 el método regex es más rápido que toLower() –

+1

el método regex termina siendo más lento si el término de búsqueda proviene de la entrada del usuario, vea mi respuesta aquí http://stackoverflow.com/a/19920595/1333402 – ssmith

+1

Sí, porque la diferencia de 50 ms es realmente me va a molestar ... – ppumkin

14

No, no hay manera de distinguir mayúsculas y minúsculas a llamar a esa función. Quizás la razón por la que su segundo ejemplo no funciona es porque falta una llamada a la función text().

Prueba esto:

var search = "nopic"; 
var noPic = largeSrc.text().toLowerCase().indexOf(search.toLowerCase()); 
+0

tenga en cuenta que indexOf() puede ser lento para grandes cadenas, ver http://stackoverflow.com/a/4579228/1333402 – ssmith

2

Tenga en cuenta que si la cadena de búsqueda es de entrada del usuario que necesita para escapar de los caracteres de expresiones regulares especiales, que al final hace más lento el enfoque de expresión regular, haciendo que el toLowerCase() se acercan a los más rápidos en este caso.

Esto es lo que se vería así:

var search = getUserInput(); 

/* this slows it down */ 
var regex = RegExp(search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), "i"); 

var noPic = testString.search(regex); 

Véase el jsperf actualización: http://jsperf.com/regex-vs-tolowercase-then-regex/4

nota al pie: expresión regular escapar de https://stackoverflow.com/a/3561711/1333402

2

Pruebe con:

var lowerCaseLargeSrc = largeSrc.toLowerCase(); 
var noPic = lowerCaseLargeSrc.indexOf("nopic"); 
0

Su código solo funcionará si largeSrc ya es una cadena. Es posible que esté recibiendo una entrada que es un elemento html en su lugar. Por lo tanto, use jQuery para resolver cualquier posible elemento de entrada en el texto que está dentro de él. Ejemplo:

var noPic = largeSrc.text().toLowerCase().indexOf("nopic"); 
Cuestiones relacionadas