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...']
}
4 Réponses :
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);
Vous pouvez utiliser Match et Lookahead et Lookahead et Word Limites, p> |. + code> Pour prendre soin de la chaîne à l'extrémité, qui sont moins de longueur maximale à l'extrémité 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))
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 code>
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);Je suggérerais:
1) Split String par Symbole de l'espace, donc nous obtenons des mots de mots p>
2) commençant à créer à nouveau une chaîne en sélectionnant des mots un par un ... p>
3) Si le mot suivant fait que la chaîne dépasse la longueur maximale, nous ouvrons une nouvelle chaîne avec ce mot p>
quelque chose comme ceci: p>
Une question rapide pourquoi la première chaîne Splitd est
ceci est une entrée code> nonceci est un exemple d'entrée code>? Si vous ne vouliez que seulement le mot moins quemaxlength code> alors pourquoi'exemple d'une phrase code> a une longueur de chaîne supérieure à 20?