2013-04-26 12 views
9

Quindi ho una bella stringa lunga che ho bisogno di dividere in Javascript in uno spazio che segue una certa quantità di caratteri. Per esempio, se hoCome dividere una stringa in uno spazio dopo un determinato numero di caratteri in javascript?

"Sei un cane e io sono un gatto."

e voglio dividerlo dopo 10 caratteri ma nello spazio successivo ... quindi piuttosto che spaccare il cane voglio che lo spazio successivo sia il punto di divisione.

Spero di averlo scritto chiaramente, è un po 'imbarazzante da spiegare.

EDIT: Ho bisogno di memorizzare tutto questo in un array. Quindi suddividere la stringa come descritto, ma memorizzandola in un array che posso scorrere. Scusa per la confusione, come ho detto, un po 'strano da descrivere.

+0

La risposta si è scelto rifilato gli spazi nei punti di divisione, ma che non sembra essere parte delle tue esigenze. – Xotic750

risposta

15

considerare:

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

Risultato:

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

Ora conosco meglio i requisiti, questo è quello che avrei fatto o simile, ma di solito preferisco "~" piuttosto che "@" come token. Roba buona! – elclanrs

+0

la migliore risposta- grazie. e a tutti per le loro risposte – muzzledBYbrass

+0

Ma cosa è successo agli spazi? Non fanno parte del testo? Non vedo nulla nelle domande che dicono di tagliare gli spazi? – Xotic750

4

È questo quello che cerchi? 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); 

Per avvolgetelo, String.prototype.indexOf tornerà -1 se la stringa che si sta cercando non viene trovato. Per assicurarti di non ottenere risultati errati, controlla quello prima dell'ultima parte. Inoltre, l'indice dello spazio può essere string.length - 1 (l'ultimo carattere nella stringa è uno spazio), nel qual caso s.index(" ") + 1 non ti darà ciò che desideri.

+0

grazie per la risposta, ma ho bisogno di archiviare tutto in un array, quindi non posso tagliare nulla. sarà molto probabilmente una cosa delle regex. – muzzledBYbrass

7

.indexOf ha un parametro from.

str.indexOf(" ", 10); 

È possibile ottenere la stringa prima e dopo la scissione, rispettivamente, con:

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

Ecco una soluzione regex per una certa varietà:

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

carino, grazie signore. questo è quello che sto andando, ma ho bisogno di avere una matrice di una stringa molto più grande. Quindi, se ho una stringa di 500 caratteri, voglio avere una matrice dell'intera cosa analizzata come se fosse qui, ma applicata solo all'intera stringa. – muzzledBYbrass

+1

@elclanrs Sei un tipo intelligente ma dovresti documentare il tuo codice. :-) – 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))); 

produce

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

questa è la roba. grazie mille – muzzledBYbrass

3

Questo dovrebbe fare quello che vuoi, e non 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); 

On jsfiddle

Ed ecco un jsperf a confronto questa risposta e la risposta regex che hai scelto.

aggiuntive: se si vuole tagliare gli spazi di ogni blocco di testo quindi modificare il codice in questo modo

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

Cercando questo per diverse ore. Eccellente! – Zl3n

Problemi correlati