快速背景:我有一个包含到其他页面引用的字符串。该页面链接到使用以下格式:“#12”。哈希随后页的ID。

说我有以下字符串:

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

我已经知道的页面是需要链接的ID:

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

我遍历网页ID和如何链接的#12,#125,以各自的网页?我碰到的问题是,如果我这样做(在轨):

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

此工作正常#12,但它的#125中的“12”部分12的ID链接到的页面。

任何帮助将是真棒。

有帮助吗?

解决方案

如果您的索引总是在字边界结束,您可以匹配:

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

您只需要添加搜索模式的字边界符号\b,这是没有必要的替换模式。

其他提示

除了第一提取ID,然后替换它们,你可以简单地找到和一气呵成替换它们:

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

因为即使你需要的ID其他地方,以及你不能离开了提取步骤,这应该是更快,因为它并没有去通过每个ID整个字符串。

PS:如果str不是从其他地方提到,你可以使用str.gsub!代替str = str.gsub

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top