2013-08-27 11 views
20

Co to jest dobra strategia, aby uzyskać pełne słowa do tablicy z jego kolejnym charakterem.Break zdanie javascript przez słowa

Przykład. To niesamowite zdanie.

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

Elementy 0-3 będą miały następną przestrzeń, ponieważ kropka kończy się na czwartym elemencie.

Mój pomysł słownie znaczy .. Hej, musisz podzielić je przez odstępy między znakami, Następnie po szerokości elementu z którym wstrzyknięto elementów tablicy sięga X, włamać się do nowej linii.

Proszę, gawd nie daje ton kodu. Wolę pisać własne, tylko powiedz mi, jak byś to zrobił.

+0

masz na myśli .split ("")? – peterchon

+0

Podejdę do podejścia podanego w tej odpowiedzi http://stackoverflow.com/questions/4514144/js-string-split-without-removing-the-delimiters. Ale dla twojej sprawy zmień 'var newstringreplaced = string.replace (/ d/gi,", d ");' na 'var newstringreplaced = string.replace (/ \ s/gi,", ");'. ** Edycja: ** Należy pamiętać, że takie podejście jest użyteczne tylko wtedy, gdy oryginalny ciąg nie ma znaku ','. Przypuszczam, że to rozwiązanie jest o wiele bezpieczniejsze: http://stackoverflow.com/a/4514241/1417588 –

Odpowiedz

24

Wystarczy użyć split:

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

i jeśli trzeba go z miejsca, to dlaczego nie można po prostu zrobić? (użyj pętli później)

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."] 

Aha, śpij dobrze!

+0

tak, prawie, ale puste miejsca na końcu każdego słowa są nieobecne ... – cars10m

+0

@ cars10 Zmieniono odpowiedź - czy to naprawić to? – h2ooooooo

+2

@ cars10 Dlaczego potrzebujesz pustych miejsc na końcu każdego słowa? Jeśli chcesz je odzyskać po zakończeniu łańcucha, po prostu '.join ('');' –

0

Użyj funkcji javascript split.

+4

Proszę zawsze wyjaśniać swoje odpowiedzi więcej niż tylko "fraza". Nawet jeśli jest to właściwa odpowiedź, jak teraz. – Sergio

1

Oto rozwiązaniem, jeśli chce to przestrzeń i pełna w czasie 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

spróbować

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

Będzie

  1. wstawić znacznik §sep§ po każdym wybranym separatorze [ .,;]+
  2. podziel łańcuch na zaznaczone pozycje, zachowując w ten sposób rzeczywiste ograniczniki.
+0

Dzięki! To świetne rozwiązanie! –

4

Jeśli potrzebujesz spacji i kropki, najprościej byłoby.

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

wynikiem będzie tablica (to, jest, niesamowite, zdanie.)

19

podobne do Ravi's answer użyć match, ale używać słowa brzegowy \b w regex podzielić na granicy słów:

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

plony

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

lub

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

wydajność

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

To jest najlepsza odpowiedź imho, dzięki –

+2

Jest to rzeczywiście najlepsza odpowiedź, ponieważ podzielona przez przestrzeń nie jest użyteczna w rzeczywistych sytuacjach. No chyba, że ​​nie używasz interpunkcji i zawsze używaj pojedynczych spacji. –

+0

Przekształca "nie" w "wygrany" i "t". Pozwala to na skurcze: str.match (/ \ b (\ w +) '? (\ W +)? \ B/g) –

Powiązane problemy