Google currently uses keywords such as site:
or is:
in searches (the second example is from Gmail). I\'m trying to develop a similar system and am
foo:(hello world) bar:(-{bad things}) email:something@email.tld another:weird characters +=2{-52!%#^ final:end
/\s+(?=\w+:)/
[
'foo:(hello world)',
'bar:(-{bad things})',
'email:something@email.tld',
'another:weird characters +=2{-52!%#^',
'final:end'
]
\s+ one or more spaces
(?= followed by (positive lookahead)
\w+ one or more word characters
: literal `:' (colon character)
)
Iterate through the array, split each element at :
(colon). The left side key
could be used to call a function and the right side value
could be passed as the function parameter. This should pretty much put you on track for whatever you want to do from here.
# Search class
class Search
def initialize(query)
@query = query
end
def foo(input)
"foo has #{input}"
end
def bar(input)
"bar has #{input}"
end
def email(input)
"email has #{input}"
end
def another(input)
"another has #{input}"
end
def final(input)
"final has #{input}"
end
def exec
@query.split(/\s+(?=\w+:)/).each do |e|
method, arg = e.split(/:/)
puts send(method, arg) if respond_to? method
end
end
end
q = "foo:(hello world) bar:(-{bad things}) email:something@email.tld another:weird characters +=2{-52!%#^ final:end";
s = Search.new(q)
s.exec
foo has (hello world)
bar has (-{bad things})
email has something@email.tld
another has weird characters +=2{-52!%#^
final has end