12
votes

Chunk / Split une chaîne en JavaScript sans rompre les mots

Bonne journée,

J'aimerais savoir s'il y a un moyen facile de chunk / diviser une chaîne sans casser les mots. P>

//http://phpjs.org/functions/chunk_split:369
function chunk_split (body, chunklen, end) {
    // Returns split line  
    // 
    // version: 1103.1210
    // discuss at: http://phpjs.org/functions/chunk_split
    // +   original by: Paulo Freitas
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Theriault
    // *     example 1: chunk_split('Hello world!', 1, '*');
    // *     returns 1: 'H*e*l*l*o* *w*o*r*l*d*!*'
    // *     example 2: chunk_split('Hello world!', 10, '*');
    // *     returns 2: 'Hello worl*d!*'
    chunklen = parseInt(chunklen, 10) || 76;
    end = end || '\r\n';

    if (chunklen < 1) {
        return false;
    }

    return body.match(new RegExp(".{0," + chunklen + "}", "g")).join(end);
}


1 commentaires

Les chaînes sont des matrices afin que vous puissiez tester si la chaîne [80] est un caractère (pas un espace) si oui puis 81,82 .... et ainsi de suite


4 Réponses :


12
votes

Voici un certain code de force brute qui le fera: xxx

si cette routine rencontre un seul mot plus long que la longueur de ligne souhaitée, elle le mettra sur une ligne par elle-même et ne sera pas Brisez-le.

Vous pouvez jouer avec elle ici: http://jsfiddle.net/jfriend00/fbale/ < / a>


2 commentaires

Une seule de ces réponses qui a fonctionné pour moi sur la boîte (était la dernière fois que j'ai essayée)


Fonctionne comme prévu. Cela permet de scinder un texte important en morceaux de taille n.



7
votes

quelque chose comme ça? XXX PRE>

Mise à jour EM> P>

Maintenant que j'ai relu la question, voici une solution mise à jour: P >

var len = 80;
var curr = len;
var prev = 0;

output = [];

while (input[curr]) {
    if (input[curr++] == ' ') {
        output.push(input.substring(prev,curr));
        prev = curr;
        curr += len;
    }
}
output.push(input.substr(prev));  


4 commentaires

Quand j'ai vu votre petit morceau de codes, j'étais heureux pour une si petite façon de le faire. Malheureusement je ne peux pas le faire fonctionner.


Désolé, j'ai mal compris votre question. :( modifié ma réponse cependant et c'est toujours petit. :)


Je ne sais pas ce que je manque ici mais cela ne casse pas comme demandé


Merci, j'avais essayé de trouver quelque chose de similaire. Travailler actuellement avec Google Apps-Script, et ce n'est pas CSS :(



8
votes

Ceci s'appuie sur la réponse de @ Steve, mais scindera la chaîne concernant la pause de mots afin que la chaîne ne soit jamais supérieure à la longueur spécifiée. Cela fonctionne plus comme un work normal.

function chunkString(s, len)
{
    var curr = len, prev = 0;

    output = [];

    while(s[curr]) {
      if(s[curr++] == ' ') {
        output.push(s.substring(prev,curr));
        prev = curr;
        curr += len;
      }
      else
      {
        var currReverse = curr;
        do {
            if(s.substring(currReverse - 1, currReverse) == ' ')
            {
                output.push(s.substring(prev,currReverse));
                prev = currReverse;
                curr = currReverse + len;
                break;
            }
            currReverse--;
        } while(currReverse > prev)
      }
    }
    output.push(s.substr(prev)); 
    return output;
}


0 commentaires

3
votes

Merci à O'RourRke, j'étais très utile. Je viens de le mettre à jour avec la scission.

private chunkString(str, len) {
    let input = str.trim().split(' ');
    let [index, output] = [0, []]
    output[index] = '';
    input.forEach(word => {
        let temp = `${output[index]} ${word}`.trim()
        if (temp.length <= len) {
            output[index] = temp;
        } else {
            index++;
            output[index] = word;
        }
    })
    return output
}


1 commentaires

Très soigné, merci