Question

fond rapide: J'ai une chaîne qui contient des références à d'autres pages. Les pages sont liées à l'utilisation du format: « # 12 ». Un hachage suivi de l'ID de la page.

Dire que j'ai la chaîne suivante:

str = 'This string links to the pages #12 and #125'

Je connais déjà les ID des pages qui ont besoin de liaison:

page_ids = str.scan(/#(\d*)/).flatten
=> [12, 125]

Comment puis-je boucle à travers la page ids et lier le # 12 et # 125 à leurs pages respectives? Le problème que j'ai rencontré est si je fais ce qui suit (en rails):

page_ids.each do |id|
  str = str.gsub(/##{id}/, link_to("##{id}", page_path(id))
end

Cela fonctionne bien pour # 12, mais elle relie la partie de # 125 à la page "12" avec l'ID de 12.

Toute aide serait génial.

Était-ce utile?

La solution

si vos index se terminent toujours aux limites de mot, vous pouvez faire correspondre que:

page_ids.each do |id|
  str = str.gsub(/##{id}\b/, link_to("##{id}", page_path(id))
end

il vous suffit d'ajouter le symbole limite de mot \b sur le modèle de recherche, il ne faut pas pour le motif de remplacement.

Autres conseils

Au lieu d'extraire les IDs d'abord, puis les remplacer, vous pouvez simplement trouver et de les remplacer en une seule fois:

str = str.gsub(/#(\d*)/) { link_to("##{$1}", page_path($1)) }

Même si vous ne pouvez pas laisser l'étape d'extraction, car vous avez besoin ids un autre endroit aussi bien, cela devrait être beaucoup plus rapide, car il n'a pas à passer par la chaîne entière pour chaque id.

PS: Si str n'est pas mentionné de nulle part ailleurs, vous pouvez utiliser str.gsub! au lieu de str = str.gsub

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top