2009-08-07 9 views
13

Sto cercando di trovare se un'immagine ha il suo nome sorgente noPic che può essere in maiuscolo o minuscolo.Indice JavaScriptDa ignorare Case

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

Dovrei scrivere:

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

Ma questa soluzione non funziona ...

+0

Che cos'è largeSrc? Sei sicuro che sia una stringa? –

+0

Usa il debugger. Imposta un breakpoint sulla linea 'var noPic = ...' e vedi cosa sono il tipo e il valore di 'largeSrc'. Oppure puoi mettere un 'console.log (typeof largeSrc, largeSrc);' prima della tua linea. Ma dalla domanda, sembra che tu non possa avere familiarità con il debugger JavaScript interattivo nel tuo browser. Consiglio vivamente di familiarizzare con esso. Ad esempio: [tutorial di Chrome DevTools] (https://developer.chrome.com/devtools). –

risposta

21

È possibile utilizzare espressioni regolari con un modificatore case-insensitive - certamente non necessariamente veloce come indexOf.

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

in base a: http://jsperf.com/regex-vs-tolowercase-then-regex/2 il metodo regex è più veloce di toLower() –

+1

il metodo regex diventa più lento se il termine di ricerca deriva dall'input dell'utente, vedere la mia risposta qui http://stackoverflow.com/a/19920595/1333402 – ssmith

+1

Sì, perché la differenza di 50 ms è davvero andando a farmi incazzare ... – ppumkin

14

No, non c'è modo case-insensitive di chiamare quella funzione. Forse la ragione per cui il tuo secondo esempio non funziona è perché ti manca una chiamata alla funzione text().

Prova questo:

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

nota che indexOf() può essere lento per stringhe di grandi dimensioni, consulta http://stackoverflow.com/a/4579228/1333402 – ssmith

2

Nota che se la stringa di ricerca è da input dell'utente è necessario sfuggire ai caratteri regexp speciali, che alla fine rallenta il metodo regexp, rendendo il toLowerCase() si avvicinano il più veloce in questo caso.

Ecco cosa sarebbe simile:

var search = getUserInput(); 

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

var noPic = testString.search(regex); 

Vedi l'jsperf aggiornamento: http://jsperf.com/regex-vs-tolowercase-then-regex/4

nota: regexp fuga dalla https://stackoverflow.com/a/3561711/1333402

2

Prova con:

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

Il tuo codice funzionerà solo se largeSrc è già una stringa. Potresti ricevere un input che è invece un elemento html. Quindi, usa jQuery per risolvere qualsiasi potenziale elemento di input nel testo che è al suo interno. Esempio:

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