如何使用正则表达式使用gsub进行搜索和替换?

时间:2013-07-24 13:09:51

标签: ruby regex string gsub

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

我的意见是:

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"

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

3 个答案:

答案 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>')