2013-08-27 12 views
20

Qual è una buona strategia per ottenere parole complete in un array con il suo carattere successivo.javascript frase di interruzione a parole

Esempio. Questa è una frase fantastica.

Array(
[0] => This 
[1] => is 
[2] => an 
[3] => amazing 
[4] => sentence. 
) 

Gli elementi 0 - 3 avranno uno spazio successivo, poiché un periodo supera il quarto elemento.

La mia idea a parole è dire .. Ehi, ho bisogno di dividere questi distanziando carattere, Poi una volta che la larghezza dell'elemento con elementi di matrice iniettato raggiunge X, rottura in una nuova linea.

Per favore, gawd non dare tonnellate di codice. Preferisco scrivere il mio solo dimmi come lo faresti.

+0

vuoi dire .split ("")? – peterchon

+0

Prenderò l'approccio fornito in questa risposta http://stackoverflow.com/questions/4514144/js-string-split-without-removing-the-delimiters. Ma per il tuo caso cambia 'var newstringreplaced = string.replace (/ d/gi,", d ");' a 'var newstringreplaced = string.replace (/ \ s/gi,", ");'. ** Modifica: ** Dovrebbe essere consigliato questo approccio è utile solo se la tua stringa originale non ha un ','. Suppongo che questa soluzione sia molto più sicura: http://stackoverflow.com/a/4514241/1417588 –

risposta

24

Basta usare split:

var str = "This is an amazing sentence."; 
var words = str.split(" "); 
console.log(words); 
//["This", "is", "an", "amazing", "sentence."] 

e se ne avete bisogno, con uno spazio, perché non basta fare che? (Utilizzare un ciclo in seguito)

var str = "This is an amazing sentence."; 
var words = str.split(" "); 
for (var i = 0; i < words.length - 1; i++) { 
    words[i] += " "; 
} 
console.log(words); 
//["This ", "is ", "an ", "amazing ", "sentence."] 

Oh, e dormire bene!

+0

sì, quasi, ma mancano gli spazi vuoti alle estremità di ogni parola ... – cars10m

+0

@ cars10 Modificata la risposta - questa soluzione vero? – h2ooooooo

+2

@ cars10 perché avresti bisogno degli spazi vuoti alla fine di ogni parola? Se li vuoi indietro quando concatri la tua stringa solo ".join (''); ' –

0

Utilizzare la funzione javascript split.

+4

Spiega sempre le tue risposte in più che solo "una frase". Anche se è la risposta giusta come ora. – Sergio

1

Qui è un'opzione se si voleva includere lo spazio e completo in O (N)

var str = "This is an amazing sentence."; 
var words = []; 
var buf = ""; 
for(var i = 0; i < str.length; i++) { 
    buf += str[i]; 
    if(str[i] == " ") { 
     words.push(buf); 
     buf = ""; 
    } 
} 

if(buf.length > 0) { 
    words.push(buf); 
} 
12

provare questo

var words = str.replace(/([ .,;]+)/g,'$1§sep§').split('§sep§'); 

Ciò

  1. inserire un marcatore §sep§ dopo ogni delimitatore scelto [ .,;]+
  2. divide la stringa nelle posizioni contrassegnate, preservando così i delimitatori effettivi.
+0

Grazie! Questa è un'ottima soluzione! –

4

Se aveste bisogno di spazi e punti il ​​più semplice sarebbe.

"This is an amazing sentence.".match(/.*?[\.\s]+?/g); 

il risultato sarebbe Matrice (Questa è una frase incredibile.)

19

Simile a Ravi's answer, utilizzare match, ma usare la parola di confine \b nel regex per dividere su confini di parola:

'This is a test. This is only a test.'.match(/\b(\w+)\b/g) 

rendimenti

["This", "is", "a", "test", "This", "is", "only", "a", "test"] 

o

'This is a test. This is only a test.'.match(/\b(\w+\W+)/g) 

cede

["This ", "is ", "a ", "test. ", "This ", "is ", "only ", "a ", "test."] 
+0

Questa è la migliore risposta imho, grazie –

+2

Questa è davvero la migliore risposta, in quanto divisa dallo spazio non è realmente utilizzabile per scenari di vita reale. Bene, a meno che non usi la punteggiatura e usi sempre lo spazio bianco singolo. –

+0

Converte "non" in "vinto" e "t". Questo consente le contrazioni: str.match (/ \ b (\ w +) '? (\ W +)? \ B/g) –

Problemi correlati