如何用“:”分割搜索词

Dan*_*bio 5 ruby regex

我有以下搜索词:

"login:17639 email:fakemail@gmail.com ref:co-10000 common_name:testingdomain organization:'Internet Company'"

该术语源自 params 变量,其中左侧的:所有内容都是过滤器术语,右侧的所有内容都是过滤器:的值。我想要做的是将术语拆分为键和值,并从它们创建一个散列。这是最终目标:

search_filters = {
  login:17639,
  email:'fakemail@gmail.com',
  etc, etc,
}
Run Code Online (Sandbox Code Playgroud)

我正在split, gsub, tr尝试获得这些值,但我在组织领域遇到了问题。这是我到目前为止所拥有的:

term.gsub(/'/,'').tr(':', ' ').split(" ")
term.gsub(":")
Run Code Online (Sandbox Code Playgroud)

基本上,还有许多其他变体,如上述。问题是组织领域。每次迭代都会产生这样["organization", "Internet", "Company"]的结果,问题是“互联网公司”正在分裂。我不能为这个过滤器放置一个简单的 if/else 语句来将它们粘合在一起,因为有更多的过滤器需要处理。有没有办法可以更容易地根据冒号来划分过滤项?谢谢你。

tad*_*man 6

以下是有关如何开始的示例:

def splart(input)
  input.scan(/([^:]+):('[^']*'|"[^"]*"|\S+)/).to_h
end
Run Code Online (Sandbox Code Playgroud)

这将梳理出您需要的数据。之后你可能需要清理它。