0
votes

Diviser une chaîne basée sur la longueur maximale du caractère, mais garder des mots en compte

Donc, dans mon programme, je peux recevoir des chaînes de toutes sortes de longueurs et les envoyer sur leur chemin pour être traduit. Si ces chaînes sont d'une certaine longueur de caractère, je reçois une erreur, je veux donc vérifier et diviser ces chaînes si nécessaire avant cela. Mais je ne peux pas simplement diviser la corde au milieu d'un mot, les mots eux-mêmes doivent également être intacts et pris en compte.

Ainsi, par exemple: P>

let str = "this is an input example of one sentence that contains a bit of words and must be split"
let splitStringArr = [];

// If string is larger than X (for testing make it 20) characters
if(str.length > 20) {
    // Split string sentence into smaller strings, keep words intact
    //...
    // example of result would be
    // splitStringArr = ['this is an input', 'example of one sentence' 'that contains...', '...']
    // instead of ['this is an input exa' 'mple of one senten' 'ce that contains...']
}


1 commentaires

Une question rapide pourquoi la première chaîne Splitd est ceci est une entrée non ceci est un exemple d'entrée ? Si vous ne vouliez que seulement le mot moins que maxlength alors pourquoi 'exemple d'une phrase a une longueur de chaîne supérieure à 20?


4 Réponses :


2
votes

Ce que vous recherchez est lastinexof

Dans cet exemple, maxokaystringlength est la longueur maximale que la chaîne peut être avant de provoquer une erreur. P>

myString.lastIndexOf(/\s/,maxOkayStringLength);


0 commentaires

1
votes

Vous pouvez utiliser Match et Lookahead et Lookahead et Word Limites, |. + code> Pour prendre soin de la chaîne à l'extrémité, qui sont moins de longueur maximale à l'extrémité

p>

let str = "this is an input example of one sentence that contains a bit of words and must be split"

console.log(str.match(/\b[\w\s]{20,}?(?=\s)|.+$/g))


1 commentaires

Si vous ne voulez pas que les chaînes ne sont inférieures à la maxlength, alors vous pouvez simplement utiliser / \ b [\ w \ s] {20,}? (? = \ S) / g



1
votes

Voici un exemple en utilisant Réduisez code> .

p>

const str = "this is an input example of one sentence that contains a bit of words and must be split";

// Split up the string and use `reduce`
// to iterate over it
const temp = str.split(' ').reduce((acc, c) => {

  // Get the number of nested arrays
  const currIndex = acc.length - 1;

  // Join up the last array and get its length
  const currLen = acc[currIndex].join(' ').length;

  // If the length of that content and the new word
  // in the iteration exceeds 20 chars push the new
  // word to a new array
  if (currLen + c.length > 20) {
    acc.push([c]);

  // otherwise add it to the existing array
  } else {
    acc[currIndex].push(c);
  }

  return acc;

}, [[]]);

// Join up all the nested arrays
const out = temp.map(arr => arr.join(' '));

console.log(out);


0 commentaires

1
votes

Je suggérerais:

1) Split String par Symbole de l'espace, donc nous obtenons des mots de mots

2) commençant à créer à nouveau une chaîne en sélectionnant des mots un par un ...

3) Si le mot suivant fait que la chaîne dépasse la longueur maximale, nous ouvrons une nouvelle chaîne avec ce mot

quelque chose comme ceci: xxx


0 commentaires