Bo search() zwraca indeks znaku, w którym zaczyna się dopasowanie. A że szukasz \S, czyli dowolnego znaku, który nie jest spacją, to jakakolwiek literka na początku stringu będzie się łapała. Stąd dostajesz 0.
Co dokładnie ma robić ta funkcja? Bo jeśli dobrze rozumuję, to można ją zastąpić przez split() – string.split( /\s/ )