我想替换括号内的文字,其中包含colon
和u
。
例如,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>")
答案 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)