使用Ruby从map变量返回子串

Jul*_*ide -1 ruby orm ruby-on-rails

我有一个来自地图的变量,我试图在方括号之间得到一个特定的部分

(例如, "dmfkdmfk [IWANTTHISPART] mlkm")

但它不像我那样工作.我正在尝试这里使用的相同方式.

原始代码:

query_values = activities.map do |activity|
  '(' +
  "#{activity['note']}"
  +')'

end
Run Code Online (Sandbox Code Playgroud)

我试过了:

query_values = activities.map do |activity|
  '(' +
  "#{activity['note'].[/#{"["}(.*?)#{"]"}/m, 1]}" 
  +')'

end
Run Code Online (Sandbox Code Playgroud)

错误日志:

syntax error, unexpected '[', expecting '('
      '(' + "#{activity['note'].[/#{"["}(.*?)#{"]"}/m, 1]},""'" +')'
                                 ^
quase.rb:40: syntax error, unexpected keyword_end, expecting tSTRING_DEND
Run Code Online (Sandbox Code Playgroud)

我该怎么办?非常感谢.

Car*_*and 6

str = "(dmfkdmfk[IWANTTHISPART]mlkm)"
Run Code Online (Sandbox Code Playgroud)

#1使用带有外观的正则表达式

R0 = /
     (?<=\[) # match a left bracket in a positive lookbehind
     .+      # match one or more of any character
     (?=\])  # match a right bracket in a positive lookahead
     /x      # free-spacing regex definition mode
Run Code Online (Sandbox Code Playgroud)

(同 R0 = /(?<=\[).+(?=\])/)

str[R0] #=> "IWANTTHISPART"
Run Code Online (Sandbox Code Playgroud)

#2在左侧或右侧括号上拆分字符串

R1 = /
     [\[\]] # match a left or right bracket
     /x
Run Code Online (Sandbox Code Playgroud)

(同R1 = /[\[\]]/)

str.split(R1)[1]
  #=> "IWANTTHISPART"
Run Code Online (Sandbox Code Playgroud)

#3没有正则表达式

str[str.index('[')+1..str.index(']')-1]
  #=> "IWANTTHISPART"
Run Code Online (Sandbox Code Playgroud)

  • 也可以在这里使用`scan`来查找方括号内的所有事物实例. (2认同)