替换括号gsub中的文本

时间:2014-12-30 04:43:46

标签: ruby regex gsub

我想替换括号内的文字,其中包含colonu

例如,Here is a link [u:person]!将变为Here is a link <a href="/user/person">Person</a>!我对正则表达式不是很有经验,而且我遇到\1$1

的问题

这是我现在使用的正则表达式:

string.gsub(/\[(\w*).*?\]/, "<a href='/user/\1'>\1</a>")

4 个答案:

答案 0 :(得分:1)

我将正则表达式更改为此,以便捕获person

/\[\w*:(.*?)\]/

然后用这个字符串替换它:

"<a href=\"/user/#{$1}\">#{$1.capitalize}</a>"

你接近$1,它只需要被评估为Ruby(在块内使用字符串插值):

string.gsub(/\[\w*:(.*?)\]/) { "<a href=\"/user/#{$1}\">#{$1.capitalize}</a>" }

答案 1 :(得分:1)

制作正则表达式/\[\w*:(.*?)\]/,以便可以捕获person而不是u。然后使用单引号字符串,以便\1不被解释为\x01

str = "Here is a link [u:person]!"
puts str.gsub(/\[\w*:(.*?)\]/, '<a href="/user/\1">\1</a>')
# => Here is a link <a href="/user/person">person</a>!

答案 2 :(得分:0)

您可以使用这样的正则表达式:

/\[u\:([\S]+)\]/

并将其替换为:

<a href='/user/#{$1}'>#{$1}</a>

这里是正则表达式的细分:

  • 首先,我们有\[,它只是文字[字符
  • 接下来,我们有u\:,分别是文字u:字符
  • 接下来,我们有([\S])。括号构成一个捕获组,这是#{$1}将在正则表达式的替换部分中填充的内容。 [\S]+查找所有非空白字符。
  • 最后,我们有\],这只是文字]字符。

您的代码应如下所示:

string.gsub('/\[u\:([\S]+)\]/', '<a href='/user/#{$1}'>#{$1}</a>')

以下是正则表达式的实时测试:https://regex101.com/r/vK0iO2

答案 3 :(得分:0)

\[[^\]]*u:([^\]]*)\]

试试这个。<a href='/user/\1'>\1</a>。见。演示。

https://regex101.com/r/gX5qF3/13