Renvoyer Le Texte En JavaScript
Je suis nouveau sur le JavaScript et jQuery.
J'ai une variable nommée comme str
en JavaScript et il contient des textes très longs, en disant quelque chose comme
"A quick brown fox jumps over a lazy dog".
Je veux de l'emballer et de l'attribuer à la même variable str
par l'insertion de la bonne \n
ou br/
balises à la bonne place.
Je ne veux pas utiliser les CSS etc. Pourriez-vous me dire comment le faire avec une fonction JavaScript qui prend la str
et renvoie le bon texte formaté?
Quelque chose comme:
str = somefunction(str, maxchar);
J'ai essayé beaucoup de choses, mais malheureusement rien n'est apparu à ce que je voulais qu'il soit! 🙁
Toute aide sera très appréciée...
Comment savez-vous quels endroits sont les "bons" endroits?
Vous voulez une nouvelle ligne tous les
Le Code doit être enveloppé dans un bloc de code, ne retirez pas le modifier(s).
Ne serait pas l'emballage fera automatiquement si votre limite de le avec de l'élément qu'il est écrit?
peut-être un wordwrap module de l'aide?
Vous voulez une nouvelle ligne tous les
n
caractères?Le Code doit être enveloppé dans un bloc de code, ne retirez pas le modifier(s).
Ne serait pas l'emballage fera automatiquement si votre limite de le avec de l'élément qu'il est écrit?
peut-être un wordwrap module de l'aide?
OriginalL'auteur user2004685 | 2013-01-23
Vous devez vous connecter pour publier un commentaire.
Ce doit insérer un saut de ligne à la plus proche des espaces de maxChar:
ce code est de couper les quelques derniers mots du texte inséré est-ce quelqu'un a modifié le code
le dernier retour est mauvais, il devrait être de retour res+str;
OriginalL'auteur ieeehh
Ici est un peu plus courte solution:
Cette fonction utilise la récursivité pour résoudre le problème.
sympa, mais votre dernière ligne n'est pas obtenir le préfixe et le suffixe, ni n'est une courte ligne. Peut-être de par sa conception, peut-être pas. 🙂
J'ai mis à jour votre jsfiddle, juste pour le plaisir: jsfiddle.net/q409e7ej/7
Je vous remercie. Nous avons trouvé ces bugs dans la mise en œuvre et résolu, je n'ai pas l'obtenir autour de la mise à jour, je vous remercie donc de le faire!
OriginalL'auteur javabeangrinder
Bien que cette question est assez vieux, de nombreuses solutions proposées jusqu'à présent sont de plus compliqué et plus cher que nécessaire, comme user2257198 souligné - C'est complètement soluble avec une courte ligne de l'expression régulière.
Cependant j'ai trouvé quelques problèmes avec sa solution, y compris: l'emballage après la largeur plutôt que de avant de, en rupture sur des caractères n'est pas explicitement inclus dans la classe de caractère et ne pas considérer existant caractères de saut de ligne provoquant le début de paragraphes à être coupée à mi-ligne.
Qui m'a conduit à écrire mon propre solution:
Bonus
Explication
Le concept principal est simplement de trouver des séquences contiguës de caractères qui ne pas contiennent de nouvelles lignes de
[^\n]
, jusqu'à la longueur désirée, de l'e.g 32{1,32}
. En utilisant la négation^
dans la classe de caractères, il est beaucoup plus permissif, en évitant les choses qui manquent, comme la ponctuation qui, autrement, auraient à être explicitement ajouté:Jusqu'à présent seuls les tranches de la chaîne exactement à 32 caractères. Il fonctionne parce qu'il est propre saut de ligne insertions de marquer le début de chaque séquence après le premier.
Briser sur les mots, une qualification est nécessaire après le gourmand quantificateur
{1,32}
pour l'empêcher de choisir les séquences se terminant au milieu d'un mot. Un mot de saut de char\b
peut causer des espaces à la mise en place de nouvelles lignes, de sorte qu'un espace blanc char\s
doit être utilisé à la place. Il doit également être placé à l'extérieur du groupe afin de les manger, pour éviter l'augmentation de la largeur maximale de 1 char:Maintenant, il se brise sur les mots, avant la limite, mais le dernier mot et la période n'a pas été suivie dans la dernière séquence, car il n'est pas appelé à disparaître de l'espace.
"Ou de fin de chaîne" option
(\s|$)
pourrait être ajouté à la white-space pour étendre le match, mais il serait encore mieux de prévenir correspondant à la dernière ligne à tous les parce qu'il provoque une inutile de nouvelle ligne doit être insérée à la fin. Pour ce faire, un négatif "look-ahead" exactement de la même séquence peut être ajouté avant, mais à l'aide d'une fin de chaîne de char au lieu d'un blanc-espace de char:Je voudrais inclure la dernière ligne jusqu'à la période dans le tableau, est-ce possible?
Comment pourrait-on ajouter un tiret au début des lignes brisées?
J'ai réussi à le faire comme ceci:
str.concat("\n").split(/(?![^\n]{1,71}$)([^\n]{1,71})\s/g).filter((_, i) => i % 2 === 1).map((s, i) => (i > 0 ?
${s}` : s)).join("\n")` (je sais, ce n'est pas beaucoup à regarder)C'est grand, mais de ce que l'id de la parole est plus grand que le maximum, il n'est pas capturé.
OriginalL'auteur Thomas Brierley
Ma variante. Il garde les mots intacts, de sorte qu'il pourrait ne pas toujours respecter les maxChars critérium.
OriginalL'auteur Stephan
De nombreux comportements comme cela peut être réalisé comme un seul-liner à l'aide d'expressions régulières (à l'aide de non-greedy quantificateurs avec un nombre minimum de caractères, ou avide de quantificateurs avec un nombre maximum de caractères, en fonction de ce comportement dont vous avez besoin).
Ci-dessous, un non-greedy remplacement global est illustré de travail dans le Nœud V8 REPL, de sorte que vous pouvez voir la commande et le résultat. Cependant, le même doit travailler dans un navigateur.
Ce modèle de recherche pendant au moins 10 caractères correspondant à un groupe défini ( \w signifie la parole des personnages, \s sens les espaces), et ancre le modèle sur un \b frontière de mot. Il utilise ensuite une référence arrière à remplacer l'original de match avec un avoir un retour à la ligne ajoutée (dans ce cas, éventuellement le remplacement d'un caractère espace qui n'est pas saisie dans le texte placé entre crochets la référence arrière).
Dans l'affiche originale du format demandé ce qui pourrait ressembler à...
OriginalL'auteur cefn
Ma version.
Elle retourne un tableau de lignes au lieu d'une chaîne de caractères comme il est plus souple sur ce séparateurs de ligne que vous souhaitez utiliser (comme le saut de ligne en html ou BR).
Pour convertir la ligne de tableau de chaîne de caractères en une chaîne:
Veuillez noter qu'il ne le renvoi à la ligne et ne se cassera pas les mots longs, et c'est probablement pas le plus rapide.
OriginalL'auteur Fredrik Corneliusson
Voici une longue réponse repose sur javabeangrinder la solution adapte le texte pour le multi-point d'entrée:
OriginalL'auteur Joshua Olson
OriginalL'auteur Ashutosh Pathak
Fatigué de regexes et difficile à lire? Vous pouvez envelopper les textes à l'aide intégrée dans
Array
méthodes. Voici une manière de le faire (il suffit de remplacer le100
limite en fonction de la longueur souhaitée:Peut-être que vous aimeriez pour le retrait de ce texte sur chaque ligne? Pas de problème, vous pouvez simplement ajouter après la dernière
join
:OriginalL'auteur Nicolas Bouvrette