2010-02-18 7 views
4

J'utilise my_colors.split ("") méthode, mais je veux diviser ou diviser la chaîne en nombre fixe de mots, par exemple chaque division se produit après 10 mots ou plus ... comment le faire en javascript?Chaînes séparées en javascript?

Répondre

7

Essayez ceci - ce regex capture des groupes de dix mots (ou moins, pour les derniers mots):

var groups = s.match(/(\S+\s*){1,10}/g); 
+0

Saint fume! Je me sens presque embarrassé de voir combien votre réponse est plus belle que la mienne! Sheery, si vous n'acceptez pas cette réponse, je vais botter un chiot. – jessegavin

+0

j'aime aussi celui-ci ... beaucoup ... plz ne botter un chiot ... – Sheery

+2

@sheery Si vous aimez la réponse, pourquoi ne pas l'accepter? La réponse que vous trouvez la plus utile devrait toujours être acceptée afin que la personne suivante qui a le même problème saura quelle solution était «la meilleure» ou du moins jugée la meilleure par le demandeur. –

2

Vous pouvez diviser ("") puis joindre ("") les éléments du tableau résultant à la fois.

0

Vous pouvez essayer quelque chose comme

console.log("word1 word2 word3 word4 word5 word6" 
       .replace(/((?:[^ ]+\s+){2})/g, '$1{special sequence}') 
       .split(/\s*{special sequence}\s*/)); 
//prints ["word1 word2", "word3 word4", "word5 word6"] 

Mais vous feriez mieux de le faire soit split(" ") puis join(" ") ou écrire simple tokenizer vous qui va diviser cette chaîne de quelque façon que vous le souhaitez.

3

Vous pouvez utiliser une expression régulière comme /\S+/g pour diviser la chaîne au cas où les mots sont séparés par plusieurs espaces ou tout autre espace.

Je ne suis pas sûr que mon exemple ci-dessous soit la façon la plus élégante de s'y prendre, mais cela fonctionne.

<html> 
<head> 
<script type="text/javascript"> 
    var str = "one two three four five six seven eight nine ten " 
         + "eleven twelve thirteen fourteen fifteen sixteen " 
         + "seventeen eighteen nineteen twenty twenty-one"; 

    var words = str.match(/\S+/g); 
    var arr = []; 
    var temp = []; 

    for(var i=0;i<words.length;i++) { 
     temp.push(words[i]); 
     if (i % 10 == 9) { 
      arr.push(temp.join(" ")); 
      temp = []; 
     } 
    } 

    if (temp.length) { 
     arr.push(temp.join(" ")); 
    } 

    // Now you have an array of strings with 10 words (max) in them 
    alert(" - "+ arr.join("\n - ")); 
</script> 
</head> 
<body> 
</body> 
</html> 
+1

Slice peut être utile ici: http://www.w3schools.com/ jsref/jsref_slice_array.asp – Kobi

+0

Bon appel sur la tranche. Cependant, je vais devoir imprimer ma réponse juste pour que je puisse la brûler. Le vôtre est tellement mieux. – jessegavin

+0

merci "jessegavin", il fait ce que je veux exactement merci beaucoup. – Sheery

Questions connexes