我想从描述字符串中过滤掉标签,并希望将它们变成锚标签。我无法返回标签的值。
我的意见是:
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"
我需要做些什么不同的事情?
答案 0 :(得分:5)
你可以这样做:
a.gsub(/#(\S+)/, '<a href="/tags/\1">\0</a>')
你的替换不起作用的原因是当你在双引号之间时必须使用双重逃避:
a.gsub(/#(\S+)/, "<a href='/tags/\\1'>\\0</a>")
请注意,此处不需要/i
修饰符。
答案 1 :(得分:3)
如果你想对正则表达式中的匹配做一些事情,你需要给gsub
一个块:
a.gsub(/#(\S+)/i) { "<a href='/tags/#{$1}'>##{$1}</a>" }
$1
是一个全局变量,Ruby会自动填充匹配字符串中的第一个捕获块。
答案 2 :(得分:1)
试试这个:
a.gsub(/(?<a>#\w+)/, '<a href="/tags/\k<a>">\k<a></a>')