2

我想从描述字符串中过滤掉标签,并将它们变成锚标签。我无法返回标签的值。

我的输入是:

a = "this is a sample #tag and the string is having a #second tag too"

我的输出应该是:

a = "this is a sample <a href="/tags/tag">#tag</a> and the string is having a <a href="/tags/second">#second</a> tag too"

到目前为止,我能够做一些小事情,但我无法获得最终输出。这种模式:

a.gsub(/#\S+/i, "<a href='/tags/\0'>\0</a>")

返回:

"this is a sample <a href='/tags/\u0000'>\u0000</a> and the string is having a <a href='/tags/\u0000'>\u0000</a> tag too"

我需要做些什么不同的事情?

4

3 回答 3

5

你可以这样做:

a.gsub(/#(\S+)/, '<a href="/tags/\1">\0</a>')

您的替换不起作用的原因是当您在双引号之间时必须使用双转义:

a.gsub(/#(\S+)/, "<a href='/tags/\\1'>\\0</a>")

请注意,/i此处不需要修饰符。

于 2013-07-24T13:27:40.533 回答
3

gsub如果你想对正则表达式的匹配做一些事情,你需要给出一个块:

a.gsub(/#(\S+)/i) { "<a href='/tags/#{$1}'>##{$1}</a>" }

$1是一个全局变量,Ruby 自动填充匹配字符串中的第一个捕获块。

于 2013-07-24T13:20:42.117 回答
1

试试这个:

a.gsub(/(?<a>#\w+)/, '<a href="/tags/\k<a>">\k<a></a>')
于 2013-07-24T13:25:55.647 回答