[英]Ruby, gsub and regex
快速背景:我有一个字符串,其中包含对其他页面的引用。 页面链接使用格式:“#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
如果索引始终以字边界结束,则可以匹配:
page_ids.each do |id|
str = str.gsub(/##{id}\b/, link_to("##{id}", page_path(id))
end
您只需在搜索模式上添加单词边界符号\\b
,就不需要替换模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.