2012-03-13 9 views
8

Jak podzielić łańcuch na X ilość znaków? Na przykład, chciałbym podzielić bardzo długi ciąg na 1000 znaków, a ciąg może być całkowicie losowy za każdym razem.javascript - jak rozbić łańcuch co X ilość znaków?

var string = <my text string that is thousands of characters long>

+0

zerwać i zrobić to, co z częściami? Owiń je czymś? Dodaj je do tablicy lub zmiennej? –

+0

Nie, po prostu zostaw je tak, jak jest, wyślij je przez POST, a następnie podzielę je razem na zapleczu. –

+0

Możesz 'podciągać()' ciąg po tym, jak weźmiesz moduł długości łańcucha i twoją kwotę x, aby określić liczbę podziałów. – user17753

Odpowiedz

13

Można użyć Regex:

'asdfasdfasdfasdf'.match(/.{3}|.{1,2}/g); // 'asd', 'fas', etc. 

Wymień 3 z 1000 toku.

Oto zmyślony przykład: http://jsfiddle.net/ReRPz/1/


Jako funkcję:

function splitInto(str, len) { 
    var regex = new RegExp('.{' + len + '}|.{1,' + Number(len-1) + '}', 'g'); 
    return str.match(regex); 
} 

To RegExp naprawdę tylko musi być utworzone, gdy jeśli masz określoną liczbę podzielić jak 1000.

+0

Nie używaj "." dla dużych bloków tekstu, jeśli możesz tego uniknąć. Sprawdzałbyś indeks indeksu wszystkich, oprócz 1000 3 mało znanych znaków odstępu. –

+0

Możesz przechwycić ostatni zestaw oddzielnie: http://jsfiddle.net/6aSHB/ –

1

lubię tego :

var myString = "my text string that is thousands of characters long"; 
var myCurrentString = ""; 
var myBrokenUpString = new Array(); 

for(var i = 0; i < myString.length; i++) { 
    myCurrentString += myString.charAt(i); 

    if(i % 1000 == 0) { 
     myBrokenUpString.push(myCurrentString); 
     myCurrentString = ""; 
    } 

    if(i + 1 == myString.length) myBrokenUpString.push(myCurrentString); 
} 

Należy pamiętać, że powyższy kod jest nietestowany i może zawierać błędy.

Następnie można POST tablicy i kawałek go z powrotem na drugim końcu. Składając-razem-kod będzie wyglądał tak:

var myRestoredString = ""; 
for(var i = 0; i<myBrokenUpString.length; i++) { 
    myRestoredString += myBrokenUpString[i]; 
} 
2

Spróbuj funkcję:

function getParts(str, len) 
{ 
    var res = []; 
    ​while (str.length) { 
     res.push(str.substring(0, len)); 
     str = str.substring(len); 
    } 
    return res; 
} 
var s = "qweasedzxcqweasdxzc12"; 
console.log(getParts(s, 10)); 

1

chciałbym użyć funkcji podciąg na ciąg

 str = //the given string 
    arr = []; 

    for(i=0;i<str.length;i+=1000) 
    { 
     s = i; 
     // if the last string is less than 1000chars 
     e = (str.length - i) > 1000 ? (i+1000) : (str.length - i); 
     arr.push = str.substring(s,e); 
    } 
1

Oto sposób rekursywnie:

var string = "my text string that is thousands of characters long"; 

var arr = []; 

function div(str, len) { 

    if(str.length < len) 
     return arr.push(str); 
    else 
     arr.push(str.substring(0,len)) 

    div(str.substring(len), len); 
} 

div(string, 5); 

for(var i = 0; i < arr.length; i++) { 
    document.write(arr[i] + "<br/>"); 
} 

/* output: 

my te 
xt st 
ring 
that 
is th 
ousan 
ds of 
char 
acter 
s lon 
g 


*/ 
0

Pożyczanie pomysł z Joe Tuskan:

var str = 'asdfasdfasdfasdf'; 
var len = 3; 
var regex = new RegExp(".{"+len+"}", "g"); 
var trail = str.length - (str.length % len); 

var parts = str.match(regex); 
parts.push(str.substring(trail)); 

document.write(parts.join('<br>')); 

http://jsfiddle.net/6aSHB/1/

Powiązane problemy