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
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
coś takiego:
var str = "please help me ";
var split = str.split(/(\S+\s+)/).filter(function(n) {return n});
@adaneo dziękuje, że działa ... czy możesz uprzejmie wyjaśnić, co robi reg expr .... niezależnie Zaznaczę właściwą odpowiedź: – Zo72
'\ 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
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(" "));
@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
Dlaczego nie utworzyć wyrażenia regularnego i dopasować je globalnie podczas przechwytywania? Coś w stylu '(\\ S + \\ s +)' wystarczy. –
@PP Czy możesz rozwinąć odpowiedź, jeśli zrobię "proszę pomóż mi" .split ("\ s + \ S +") Otrzymuję tablicę z jednym elementem [sam ciąg)? – Zo72