2013-04-26 8 views
9

Mam więc ładny długi ciąg, który muszę podzielić na Javascript w przestrzeni po określonej liczbie znaków. Na przykład, jeśli mamJak podzielić ciąg znaków na spację po określonej liczbie znaków w javascript?

"Jesteś psem, a ja jestem kotem".

i chcę, żeby się rozdzieliła po 10 znaków, ale w następnej przestrzeni ... więc zamiast rozdzielać psa, chcę, aby następne miejsce było punktem podziału.

Mam nadzieję, że napisałem to wyraźnie, jest to trochę niezręczne do wyjaśnienia.

EDYCJA: Muszę zapisać to wszystko w tablicy. Rozdzielam łańcuch, tak jak to opisałem, ale przechowuję go w tablicy, którą mogę przerobić. Przepraszam za zamieszanie - jak powiedziałem, nieco dziwne do opisania.

+0

Odpowiedź Wybrano przycięte przestrzenie w punktach podziału, ale to nie wydaje się być częścią Twoich wymagań. – Xotic750

Odpowiedz

15

Rozważmy:

str = "How razorback-jumping frogs can level six piqued gymnasts!" 
result = str.replace(/.{10}\S*\s+/g, "$&@").split(/\[email protected]/) 

Wynik:

[ 
"How razorback-jumping", 
"frogs can level", 
"six piqued", 
"gymnasts!" 
] 
+0

Znając teraz wymagania lepiej, zrobiłbym to lub podobnym, ale zazwyczaj wolę zamiast tego '' 'zamiast' @ 'jako token. Dobry towar! – elclanrs

+0

najlepsza odpowiedź- dziękuję. i wszystkim za ich odpowiedzi. – muzzledBYbrass

+0

Ale co się stało z przestrzeniami? Czy nie są częścią tekstu? Nie widzę nic w pytaniach, które mówią, żeby przyciąć przestrzenie? – Xotic750

4

Czy to jest to, czego szukasz? http://jsfiddle.net/alexflav23/j4kwL/

var s = "You is a dog and I am a cat."; 
s = s.substring(10, s.length); // Cut out the first 10 characters. 
s = s.substring(s.indexOf(" ") + 1, s.length); // look for the first space and return the 
// remaining string starting with the index of the space. 
alert(s); 

Aby owinąć go, String.prototype.indexOf powróci -1 jeśli ciąg szukasz nie została znaleziona. Aby upewnić się, że nie uzyskasz błędnych wyników, sprawdź to przed ostatnią częścią. Ponadto, indeksem przestrzeni może być string.length - 1 (ostatni znak w łańcuchu jest spacją), w którym to przypadku s.index(" ") + 1 nie da ci tego, co chcesz.

+0

dzięki za odpowiedź, ale muszę przechowywać wszystko w tablicy, więc nie mogę niczego wyciąć. najprawdopodobniej będzie to regex. – muzzledBYbrass

7

.indexOf ma parametr from.

str.indexOf(" ", 10); 

można uzyskać ciąg przed i po podziale, odpowiednio, ze:

str.substring(0, str.indexOf(" ", 10)); 
str.substring(str.indexOf(" ", 10)); 
0

Oto rozwiązanie regex jakiegoś odmiany:

var result = []; 
str.replace(/(.{10}\w+)\s(.+)/, function(_,a,b) { result.push(a,b); }); 

console.log(result); //=> ["You is a dog", "and I am a cat."] 
+0

Dobrze, dziękuję, proszę pana. to właśnie zamierzam, ale muszę mieć tablicę znacznie większego łańcucha. Tak więc, jeśli mam ciąg znaków o długości 500 znaków, chcę mieć tablicę całej rzeczy parsowanej tak, jakby była tutaj, ale po prostu zastosowana do całego ciągu znaków. – muzzledBYbrass

+1

@elclanrs Jesteś sprytnym facetem, ale powinieneś udokumentować swój kod. :-) – Tim

0
function breakAroundSpace(str) { 
    var parts = []; 
    for (var match; match = str.match(/^[\s\S]{1,10}\S*/);) { 
    var prefix = match[0]; 
    parts.push(prefix); 
    // Strip leading space. 
    str = str.substring(prefix.length).replace(/^\s+/, ''); 
    } 
    if (str) { parts.push(str); } 
    return parts; 
} 

var str = "You is a dog and I am a cat and she is a giraffe in disguise."; 
alert(JSON.stringify(breakAroundSpace(str))); 

produkuje

["You is a dog", 
"and I am a", 
"cat and she", 
"is a giraffe", 
"in disguise."] 
+0

to wszystko. dzięki za tonę. – muzzledBYbrass

3

ten powinien robić to, co chcesz, i nie ma regexs

var string = "You is a dog and I am a cat.", 
    length = string.length, 
    step = 10, 
    array = [], 
    i = 0, 
    j; 

while (i < length) { 
    j = string.indexOf(" ", i + step); 
    if (j === -1) { 
     j = length; 
    } 

    array.push(string.slice(i, j)); 
    i = j; 
} 

console.log(array); 

Na jsfiddle

A oto jsperf porównywaniu ta odpowiedź i wybraną odpowiedź regex.

dodatkowe: jeśli chcesz przyciąć spacji z każdego bloku tekstu, a następnie zmienić kod podobnie jak

array.push(string.slice(i, j).trim()); 
+0

Spójrz na to przez kilka godzin. Doskonały ! – Zl3n

Powiązane problemy