2013-07-18 12 views
6

Jak podzielić ciąg jak tenjavascript: dzielenie ciąg (jeszcze zachowaniu spacji)

"please  help me " 

tak że mam tablicę takich jak to:

["please  ","help ","me "] 

Innymi słowy, uzyskać tablicę który zachowuje miejsca (lub miejsc)

Dzięki

+0

@PP wyszedłem z mojego rozwiązania gdzie zrobić dla pętli i i sprawdzasz z charAt jeśli jest to przestrzeń każdej pozycji. .. i to działa, ale jestem pewien, że musi być lepszy sposób. – Zo72

+0

Dlaczego nie utworzyć wyrażenia regularnego i dopasować je globalnie podczas przechwytywania? Coś w stylu '(\\ S + \\ s +)' wystarczy. –

+0

@PP Czy możesz rozwinąć odpowiedź, jeśli zrobię "proszę pomóż mi" .split ("\ s + \ S +") Otrzymuję tablicę z jednym elementem [sam ciąg)? – Zo72

Odpowiedz

13

coś takiego:

var str = "please  help me "; 
var split = str.split(/(\S+\s+)/).filter(function(n) {return n}); 

FIDDLE

+0

@adaneo dziękuje, że działa ... czy możesz uprzejmie wyjaśnić, co robi reg expr .... niezależnie Zaznaczę właściwą odpowiedź: – Zo72

+2

'\ S' dopasowuje dowolny znak, który nie jest spacji, dodanie plusa powoduje, że jest on chciwy, pasuje do zestawu znaków, a następnie' \ s' robi odwrotną, matematyczną spację i plus powoduje, że jest chciwy, więc pasuje do grupy zaczynającej się od znaków, kończącej się białymi spacjami, a następna grupa zaczyna się, gdy jest znak po białych znakach itp. Filtr usuwa mecz na końcu i początku, a także pomiędzy każdą grupą, jako te są nudne. – adeneo

0

jest trudne bez stosowania funkcji;

var temp = "", outputArray = [], text = "please  help me ".split(""); 
for(i=0; i < text.length; i++) { 
    console.log(typeof text[i+1]) 
    if(text[i] === " " && (text[i+1] !== " " || typeof text[i+1] === "undefined")) { 
     outputArray.push(temp+=text[i]); 
     temp=""; 
    } else { 
     temp+=text[i]; 
    } 

} 
console.log(outputArray); 

Nie sądzę, aby proste wyrażenie regularne mogło temu zaradzić. można użyć prototyp używać go jak natywnego kodu ...

String.prototype.splitPreserve = function(seperator) { 
    var temp = "", 
     outputArray = [], 
     text = this.split(""); 
    for(i=0; i < text.length; i++) { 
     console.log(typeof text[i+1]) 
     if(text[i] === seperator && (text[i+1] !== seperator || typeof text[i+1] === "undefined")) { 
      outputArray.push(temp+=text[i]); 
      temp=""; 
     } else { 
      temp+=text[i]; 
     } 

    } 
    return outputArray; 
} 

console.log("please  help me ".splitPreserve(" ")); 
Powiązane problemy