这是代码
string = "Looking for the ^[cows]"
footnote = string[/\^\[(.*?)\]/]
我希望footnote
等于cows
我得到的是footnote
等于^[cows]
任何帮助?
谢谢!
答案 0 :(得分:4)
您可以使用second argument至[]
指定所需的捕获组:
string = "Looking for the ^[cows]"
footnote = string[/\^\[(.*?)\]/, 1]
# footnote == "cows"
答案 1 :(得分:0)
如果要捕获子组,可以使用Regexp#match
:
r = /\^\[(.*?)\]/
r.match(string) # => #<MatchData "^[cows]" 1:"cows">
r.match(string)[0] # => "^[cows]"
r.match(string)[1] # => "cows"
答案 2 :(得分:0)
根据String
documentation,#[]
方法接受第二个参数,一个整数,它确定返回的匹配组:
a = "hello there"
a[/[aeiou](.)\1/] #=> "ell"
a[/[aeiou](.)\1/, 0] #=> "ell"
a[/[aeiou](.)\1/, 1] #=> "l"
a[/[aeiou](.)\1/, 2] #=> nil
您应该使用footnote = string[/\^\[(.*?)\]/, 1]
答案 3 :(得分:0)
使用捕获组,然后检索其内容的替代方法是仅匹配您想要的内容。这有三种方法。
#1使用积极的外观和积极的前瞻
string[/(?<=\[).*?(?=\])/]
#=> "cows"
#2使用匹配但遗忘(\K
)和积极向前看
string[/\[\K.*?(?=\])/]
#=> "cows"
#3使用String#gsub
string.gsub(/.*?\[|\].*/,'')
#=> "cows"