2013-07-18 7 views
6

Wie teile ich eine Zeichenfolge wie diesejavascript: eine Zeichenfolge Aufspalten (noch die Räume zu bewahren)

"please  help me " 

, so dass ich ein Array wie diese:

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

Mit anderen Worten, ich erhalten eine Anordnung, die den Raum bewahrt (oder Leerzeichen)

Dank

+0

@PP ich mit meiner Lösung kam heraus, wo ich ein for-Schleife zu tun und und für jeden Artikel, den ich mit charAt überprüfen, ob es ein Raum ist. .. und das funktioniert, aber ich bin mir ziemlich sicher, dass es einen besseren Weg geben muss – Zo72

+0

Warum nicht einen regulären Ausdruck erstellen und ihn beim Capturen global abgleichen? Etwas wie '(\\ S + \\ s +)' würde ausreichen. –

+0

@PP Können Sie die Antwort ausarbeiten, wenn ich "bitte helfen Sie mir" .split ('\ s + \ S +') Ich bekomme ein Array mit einem Element [die Zeichenfolge selbst]? – Zo72

Antwort

13

so etwas wie:

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

FIDDLE

+0

@adaneo danke das klappt ... kannst du bitte erklären was der reg-Ausdruck tut .... egal Ich werde es die richtige Antwort markieren – Zo72

+2

'\ S' stimmt mit jedem Zeichen, das kein Leerzeichen ist, Hinzufügen des Plus macht es gierig, mit einer Reihe von Zeichen, und dann' \ s' tut das Gegenteil, mathing whitespace, und die Plus macht es gierig, also passt es zu einer Gruppe, die mit Zeichen beginnt und mit Whitespace endet, und die nächste Gruppe beginnt, wenn hinter dem Whitespace ein Zeichen steht usw. Der Filter entfernt die Übereinstimmung am Ende und am Anfang und zwischen jeder Gruppe als diese sind leer. – adeneo

0

Dies ist schwierig, ohne Verwendung einer Funktion;

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

Ich glaube nicht, dass eine einfache Regex dies aushelfen kann. Sie Prototyp verwenden können, um es wie ein nativer Code zu verwenden ...

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(" ")); 
Verwandte Themen