2014-09-13 6 views
8

Qual è il modo migliore per contare quanti spazi prima del carattere pugno di una stringa?javascript: conta gli spazi prima del primo carattere di una stringa

str0 = 'nospaces even with other spaces still bring back zero'; 
str1 = ' onespace do not care about other spaces'; 
str2 = ' twospaces'; 
+0

O Per curiosità, perché vuoi contare gli spazi? Sai di tagliare giusto? – rybo111

+0

Ho una casella di testo per la modifica rapida della stringa json e ho bisogno di sapere quanti spazi prima che la stringa inizi a capire dove si trova nell'oggetto – K3NN3TH

+0

Puoi usare la regex '/^\ s + /' e contare usando ' str0.match (/^\ s + /) [0] .length' – soktinpk

risposta

25

Usa String.prototype.search

' foo'.search(/\S/); // 4, index of first non whitespace char 

EDIT: È possibile cercare i "caratteri non di spaziatura, o alla fine di ingresso" al fine di evitare il controllo per -1.

' '.search(/\S|$/) 
+1

Mi piace. Richiede che venga visualizzato almeno un carattere non di spazio bianco, ma è bello e pulito. Suggerisco questa aggiunta: ''' .search (/ \ S | $ /)' che terrà conto delle stringhe che non hanno un carattere non di spazi bianchi. – JAAulde

+0

Sì, restituirà -1 se non c'è corrispondenza per \ S. – folkol

+0

Con o senza la mia aggiunta, a seconda delle esigenze dell'OP, mi piace questa risposta meglio della mia. Pensare bene. – JAAulde

5

Utilizzando la seguente espressione regolare:

/^\s*/ 

in String.prototype.match() si tradurrà in un array con un singolo elemento, la cui lunghezza vi dirà quanti caratteri spazi ci sono stati all'inizio della stringa .

pttrn = /^\s*/; 

str0 = 'nospaces'; 
len0 = str0.match(pttrn)[0].length; 

str1 = ' onespace do not care about other spaces'; 
len1 = str1.match(pttrn)[0].length; 

str2 = ' twospaces'; 
len2 = str2.match(pttrn)[0].length; 

Ricordare che questo corrisponderà anche ai caratteri di tabulazione, ognuno dei quali conterà come uno.

+1

devi aspettare 6 minuti per rispondere a – K3NN3TH

+1

Dai un'occhiata al mio commento sulla risposta di @ folkol, e quindi accetta quella risposta. Mi piace questa soluzione meglio. Puoi determinare se hai bisogno della mia aggiunta o meno a seconda delle tue circostanze e necessità, ma nel complesso è più pulito. – JAAulde

+1

ya, trovare l'indice era davvero carino. Non guarderò mai una stringa uguale. – K3NN3TH

0
str.match(/^\s*/)[0].length 

str è la stringa.

3
str0 = 'nospaces'; 
str1 = ' onespace do not care about other spaces'; 
str2 = ' twospaces'; 

arr_str0 = str0.match(/^[\s]*/g); 
count1 = arr_str0[0].length; 
console.log(count1); 

arr_str1 = str1.match(/^[\s]*/g); 
count2 = arr_str1[0].length; 
console.log(count2); 

arr_str2 = str2.match(/^[\s]*/g); 
count3 = arr_str2[0].length; 
console.log(count3); 

Qui: Ho usato espressione regolare al contare il numero di spazi prima del carattere pugno di una stringa.

^ : start of string. 
\s : for space 
[ : beginning of character group 
] : end of character group 
Problemi correlati