2011-05-30 6 views
2

si j'ai une chaîne par ex. var myStr="AAAAAAA BBBBB CCCCC DDDDD...", cette chaîne peut avoir différentes longueurs contiennent des mots avec des espaces.Comment couper la corde?

Je voudrais avoir une fonction qui va spélérer la chaîne dans un tableau, c'est la chaîne sera coupée en segments comme éléments dans le tableau, où chaque élément du tableau contient les mots de la chaîne avec longueur totale (y compris l'espace entre les mots) moins de 10 caractères.

(Chaque élément du tableau contient toujours des mots complets & espace entre les mots, pas mot coupé du milieu)

J'ai essayé:

var words=myStr.split(' '); 

alors .... quelle est la manière efficace mettre en place?

+0

Voulez-vous dire que les mots plus longs seront découpée en tranches ou exclus du tableau final? –

+0

Oui, les mots plus longs seront découpés en tranches, mais toujours séparés par un espace entre les mots, la longueur totale de chaque élément du tableau ne doit pas dépasser 10 caractères. – Leem

+1

scission est la bonne méthode pour réaliser ce que vous voulez - ce qui ne va pas? –

Répondre

0
var words = "AAAAAAA BBBBB CCCCC DDDDD\tEEEE \t FFFF".split(/\s+/); 

Une fois que vous avez les mots, vous pouvez itérer sur les mots et pousser chaque mot dans un nouveau tableau comme suit:

EDIT # 2

var words = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate, velit et luctus tristique, libero quam ornare ligula, sagittis consequat massa tellus vel nulla.".split(/\s+/); 
var output = [words[0]]; 
for (var i = 1; i < words.length; i++) { 
    var word = words[i]; 
    var prev = output.pop(); 
    if ((prev + " " + word).length <= 10) { 
    output.push(prev + " " + word); 
    } else { 
    output.push(prev); 
    output.push(word); 
    } 
} 
output; 
// ["Lorem", "ipsum", "dolor sit", "amet,", "consectetur", "adipiscing", "elit. Sed", "vulputate,", "velit et", "luctus", "tristique,", "libero", "quam", "ornare", "ligula,", "sagittis", "consequat", "massa", "tellus vel", "nulla."] 
+0

Est-ce que split permet regex? – metaforce

+0

@metaforce: Oui, c'est le cas: [split sur MDC docs] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split) –

1

essayer:

var words = myStr.replace(/(\s)/g, ' ').split(' '); 

(de la tête, non testé)

+0

Non, cela ne répond pas à mes exigences, par exemple, si myStr = 'AAA BB', votre fonction donnera le résultat ["AAA", "BB"], mais pour ce cas, le résultat devrait être ["AAA BB "], parce que la longueur totoal est inférieure à 10 caractères – Leem

+0

essayez ce modèle regex:/(\ s) {10}/g – metaforce

0

Par exemple:

var myStr = 'xxx yy wwwwww vvvv bbbbbbbbb cccccccccc a ddddddddddd eee'; 
var myArray = myStr.match(/.{1,10}(\s|$)|\S{1,10}(?!\s)/g); 
for (var i in myArray) myArray[i] = myArray[i].replace(/\s+$/, ''); 
// myArray => [ 'xxx yy', 'wwwwww', 'vvvv', 'bbbbbbbbb', 'cccccccccc', 'a', 'dddddddddd', 'd eee' ] 

Modifier 2011-05-31: exigences clarifiées reflète

+0

Notez également: Je pense qu'il y avait confusion dans la question sur "y compris l'espace" dans la limite de dix char. Si c'est le cas, une expression rationnelle plus simple serait '\ S {1,10}', qui correspondra à n'importe quelle séquence de dix caractères non-espace. –

+0

L'OP veut que "AAA BB" soit scindé en tant que ["AAA BB"] 'mais" AAAAAA BBBB "' en tant que ["AAAAAA", "BBBB"] 'puisque' AAAAAA BBBB' est 11 caractères. –