2013-07-18 7 views
6

Come faccio a dividere una stringa come questojavascript: suddivisione di un testo (ancora preservando gli spazi)

"please  help me " 

in modo che ricevo un array come questo:

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

In altre parole, ottenere un array che conserva lo spazio (o spazi)

Grazie

+0

@PP sono uscito con la mia soluzione in cui faccio un ciclo for e e per ciascuna voce verifico con charAt se si tratta di uno spazio. .. e funziona ma sono abbastanza sicuro che ci deve essere un modo migliore – Zo72

+0

Perché non creare un'espressione regolare e associarlo globalmente durante l'acquisizione? Qualcosa come '(\\ S + \\ s +)' sarebbe sufficiente. –

+0

@PP Puoi elaborare la risposta se faccio "per favore aiutami" .split ('\ s + \ S +') Ricevo un array con un elemento [la stringa stessa]? – Zo72

risposta

13

qualcosa di simile:

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

FIDDLE

+0

@adaneo grazie che funziona ... puoi gentilmente spiegare cosa fa il reg expr .... a prescindere Lo contrassegnerò come risposta corretta – Zo72

+2

'\ S' corrisponde a qualsiasi carattere che non sia uno spazio bianco, aggiungendo il plus lo rende avido, facendo corrispondere un set di caratteri, e quindi' \ s' fa l'opposto, lo spazio bianco di plus lo rende avido, quindi corrisponde a un gruppo che inizia con caratteri e termina con spazi bianchi, e il gruppo successivo inizia quando c'è un carattere dopo lo spazio bianco ecc. Il filtro rimuove la corrispondenza alla fine e all'inizio, e tra ciascun gruppo, come quelli sono emtpy. – adeneo

0

questo è difficile senza usare una funzione;

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

Non credo che una semplice regex possa essere d'aiuto. è possibile utilizzare prototipo di usarlo come un codice nativo ...

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