2014-09-13 14 views
8

Cách tốt nhất để đếm số lượng dấu cách trước ký tự nắm tay của chuỗi là gì?javascript - đếm dấu cách trước ký tự đầu tiên của chuỗi

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

O ut tò mò, tại sao bạn muốn đếm không gian? Bạn biết về cắt phải không? – rybo111

+0

tôi có một hộp văn bản để chỉnh sửa nhanh chuỗi json và tôi cần biết có bao nhiêu dấu cách trước khi chuỗi bắt đầu tìm ra vị trí của đối tượng – K3NN3TH

+0

Bạn có thể sử dụng regex '/^\ s + /' và đếm bằng cách sử dụng ' str0.match (/^\ s + /) [0] .length' – soktinpk

Trả lời

25

Sử dụng String.prototype.search

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

EDIT: Bạn có thể tìm kiếm cho "ký tự khoảng trắng thuốc, HOẶC cuối đầu vào" để tránh kiểm tra -1.

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

Tôi thích điều này. Nó yêu cầu ít nhất một char không phải khoảng trắng xuất hiện, nhưng nó đẹp và sạch sẽ. Tôi đề nghị bổ sung này: ''' .search (/ \ S | $ /)' sẽ tính các chuỗi không có char không khoảng trắng. – JAAulde

+0

Vâng, nó sẽ trả về -1 nếu không có kết quả phù hợp cho \ S. – folkol

+0

Có hoặc không có sự bổ sung của tôi, tùy thuộc vào nhu cầu của OP, tôi thích câu trả lời này tốt hơn câu trả lời của riêng tôi. Suy nghĩ tốt. – JAAulde

5

Sử dụng regex sau:

/^\s*/ 

trong String.prototype.match() sẽ cho kết quả trong một mảng với một mục duy nhất, chiều dài trong đó sẽ cho bạn biết có bao nhiêu ký tự khoảng trắng có lúc bắt đầu của chuỗi .

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; 

Hãy nhớ rằng điều này cũng sẽ khớp với ký tự tab, mỗi ký tự sẽ được tính là một.

+1

phải đợi 6 phút để trả lời – K3NN3TH

+1

Hãy xem nhận xét của tôi về câu trả lời của @ folkol, và sau đó chấp nhận câu trả lời đó. Tôi thích giải pháp đó tốt hơn. Bạn có thể xác định xem bạn cần bổ sung của tôi hay không tùy thuộc vào hoàn cảnh và nhu cầu của bạn, nhưng tổng thể nó sạch hơn. – JAAulde

+1

ya, việc tìm kiếm chỉ mục thực sự là khá khéo léo. Tôi sẽ không bao giờ nhìn vào một chuỗi giống nhau. – K3NN3TH

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

str là chuỗi.

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

đây: Tôi đã sử dụng biểu thức chính quy để đếm số lượng các không gian trước khi nhân vật nắm đấm của một chuỗi.

^ : start of string. 
\s : for space 
[ : beginning of character group 
] : end of character group 
Các vấn đề liên quan