2014-09-13 11 views
8

Jaki jest najlepszy sposób zliczania ile spacji przed pierwszym ciągiem znaków?javascript - policz spacje przed pierwszym znakiem ciągu

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

O z ciekawości, dlaczego chcesz policzyć przestrzenie? Wiesz o wykończeniu, prawda? – rybo111

+0

Mam pole tekstowe do szybkiej edycji ciągów json i muszę wiedzieć, ile spacji przed ciągiem zaczyna się domyślać, gdzie jest w obiekcie – K3NN3TH

+0

Można użyć wyrażeń '/^\ s +/i zliczać za pomocą' str0.match (/^\ s + /) [0] .length' – soktinpk

Odpowiedz

25

Zastosowanie String.prototype.search

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

EDIT: Można wyszukiwać "Non białych znaków, lub na końcu wejście", aby uniknąć sprawdzania -1.

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

Podoba mi się to. Wymaga, aby pojawił się co najmniej jeden znak spoza białych znaków, ale jest ładny i czysty. Proponuję to dodanie: ''' .search (/ \ S | $ /)', które będzie uwzględniało ciągi znaków, które nie mają znaku spacji. – JAAulde

+0

Tak, zwróci -1, jeśli nie pasuje do \ S. – folkol

+0

Z dodatkiem lub bez, w zależności od potrzeb PO, podoba mi się ta odpowiedź lepiej niż moja własna. Dobre myślenie. – JAAulde

5

używając następującego wyrażenia regularnego:

/^\s*/ 

w String.prototype.match() spowoduje tablicy z pojedynczego elementu, którego długość powie ilu spacje znaki były na początku łańcucha .

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; 

Pamiętaj, że będzie to również pasować do znaków tabulacji, z których każdy będzie liczony jako jeden.

+1

musisz poczekać 6 min, aby odpowiedzieć na – K3NN3TH

+1

Spójrz na mój komentarz na @ folkol's answer, a następnie zaakceptuj tę odpowiedź. Lubię to rozwiązanie lepiej. Możesz określić, czy potrzebujesz mojego dodatku, czy nie, w zależności od twoich okoliczności i potrzeb, ale ogólnie jest czystszy. – JAAulde

+1

ya, znalezienie indeksu było naprawdę sprytne. Nigdy nie spojrzę na ciąg znaków taki sam. – K3NN3TH

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

str jest łańcuch.

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); 

tutaj: Użyłem wyrażenie regularne do policzyć liczbę spacji przed znakiem pięści sznurku.

^ : start of string. 
\s : for space 
[ : beginning of character group 
] : end of character group 
Powiązane problemy