2015-01-03 13 views
7

Naprawdę walczę, jak podzielić tekst w najbliższym ciągu na 47. znak. Jak to się robi?Podziel tekst/ciąg w najbliższej przestrzeni w JavaScript

var fulltext = document.getElementById("text").value; 

var a = fulltext.slice(0, 47); 
console.log(a); 

var b = fulltext.slice(47, 47*2); 
console.log(b); 

var c = fulltext.slice(94, 47*3); 
console.log(c); 

Oto JS Fiddle - http://jsfiddle.net/f5n326gy/5/

Dzięki.

+2

Najbliższy następny lub nieważny? – dfsq

+0

dlaczego nie upraszczać pytań tak bardzo, jak to możliwe, i umieszczać 'var fulltext = 'mój tekst tutaj bezpośrednio i skupić się bezpośrednio na twoim problemie'' – amd

+0

Cześć, tak długo, jak trzy linie tekstu brzmią dobrze, nie mam nic przeciwko który. @dfsq –

Odpowiedz

6

Jeśli jesteś zainteresowany tylko w pierwszej części, a następnie użyć

var a = fulltext.match(/^.{47}\w*/) 

Zobacz demo (skrzypce) here.


Jeśli chcesz podzielić cały ciąg do wielu podciągi, a następnie użyć

var a = fulltext.match(/.{47}\w*|.*/g); 

Zobacz demo (skrzypce) here.

... a jeśli chcesz podciągi nie zaczynaj z separatorem słowa (takie jak spacja lub przecinek) i wolą umieścić go z poprzedniego meczu, a następnie użyć

var a = fulltext.match(/.{47}\w*\W*|.*/g); 

Zobacz demo (skrzypce) here.

+0

Wydaje się to dobrze działać w pierwszym wierszu. Czy byłbyś w stanie pokazać mi na jsfiddle, jak podzielić na trzy linie? Dziękujemy za poświęcony czas. –

+0

Przepraszamy @ Ωmega - zapomniałem oznaczyć Cię tagiem –

+1

@ TristanKirkpatrick - zaktualizowałem swoją odpowiedź. Jeśli nie tego szukasz, wyjaśnij swoje potrzeby. –

4

Możesz znaleźć następną granicę słowa, używając metody indexOf z drugim parametrem fromIndex. Następnie możesz użyć slice, aby uzyskać lewą część lub prawą.

var fulltext = "The slice() method selects the elements starting at the given start argument, and ends at, but does not include, the given end argument.";  
 
var before = fulltext.slice(0, fulltext.indexOf(' ', 47)); 
 
var after = fulltext.slice(fulltext.indexOf(' ', 47)); 
 
alert(before); 
 
alert(after);

+0

To wydaje się działać, chociaż w przypadku niektórych tekstów wybierze poprzednie słowo i wyświetli je dwukrotnie. Czy istnieje sposób obejścia tego? –

+0

Czy możesz podać mi przykład takiego tekstu? nie potrafię sobie wyobrazić, kiedy to się może zdarzyć. – dfsq

+0

Wklejałem tekst z internetu i nie pamiętam dokładnego tekstu, przepraszam. –