J'ai besoin d'écrire une petite fonction de rubis qui fait un emballage de mots. J'ai la fonction suivante:Ruby: Comment implémenter Word Wrap qui ignore les étiquettes <span> lors de la calcul de la longueur de la ligne?
def word_wrap(text, line_width)
if line_width.nil? || line_width < 2
line_width = 40
end
text.split("\n").collect do |line|
line.length > line_width ? line.gsub(/.{1,#{line_width}})(\s+|$)/, "\\1\n").strip : line
end * "\n"
end
Ceci est essentiellement la fonction word_wrap inclus dans Rails.
Je voudrais écrire une fonction similaire qui analyse une chaîne avec des éléments span à l'intérieur, sauf que les balises ne doivent pas être comptées pour envelopper la ligne.
Exemple:
s = "Lorem <span>ipsum dolor</span> si<span>t</span> amet, conse<span>ctetur adipiscing elit</span> Praesent"
Actuellement, word_wrap (s, 20) donne quelque chose comme ceci:
Lorem <span>ipsum
dolor</span>
si<span>t</span>
amet,
conse<span>ctetur
adipiscing
elit</span> Praesent
Il devrait être:
Lorem <span>ipsum dolor</span> si
<span>t</span> amet, conse<span>ctetur
adipiscing elit</span>
Praesent
Comme vous pouvez le voir , la nouvelle fonction word_wrap crée des lignes de (max) 20 caractères, sans compter les <span>
et </span>
étiquettes.
Comment le feriez-vous? Toutes les suggestions sont les bienvenues!
Merci d'avance pour votre aide.
c'est joli. – kch
Très impressionnant regexp. J'y suis allé, mais évidemment, je ne maîtrise pas les expressions rationnelles aussi bien que vous. Merci beaucoup pour votre aide. Pour l'information de tous, je posterai le résultat de votre fonction, ce qui est légèrement différent de celui que j'ai posté, mais est tout à fait valable: Lorem ipsum dolor si t amet, conse ctetur adipiscing elit Présentez Merci! –
Rampion, merci beaucoup pour toutes ces explications. C'était vraiment gentil de votre part de prendre le temps d'expliquer votre solution dans les détails. :) –