快速背景:我有一个字符串,其中包含对其他页面的引用。这些页面使用格式链接到:“#12”。哈希后跟页面 ID。
假设我有以下字符串:
str = 'This string links to the pages #12 and #125'
我已经知道需要链接的页面的 ID:
page_ids = str.scan(/#(\d*)/).flatten
=> [12, 125]
如何遍历页面 ID 并将 #12 和 #125 链接到它们各自的页面?我遇到的问题是,如果我执行以下操作(在 rails 中):
page_ids.each do |id|
str = str.gsub(/##{id}/, link_to("##{id}", page_path(id))
end
这对 #12 工作正常,但它将 #125 的“12”部分链接到 ID 为 12 的页面。
任何帮助都会很棒。
最佳答案
无需先提取 ID 然后替换它们,您只需一次找到并替换它们:
str = str.gsub(/#(\d*)/) { link_to("##{$1}", page_path($1)) }
即使您因为在其他地方也需要 ID 而不能省去提取步骤,这也应该快得多,因为它不必为每个 ID 遍历整个字符串。
PS:如果 str
没有从其他任何地方引用,您可以使用 str.gsub!
而不是 str = str.gsub
关于ruby-on-rails - Ruby、gsub 和正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1287630/