The basics
sample string:
foo:(hello world) bar:(-{bad things}) email: something@email.tld another:weird characters +=2{-52!%#^ final:end
split with regex:
/\s+(?=\w+:)/
return array:
[ 'foo:(hello world)', 'bar:(-{bad things})', 'email: something@email.tld ', 'another:weird characters +=2{-52!%#^', 'final:end' ]
explanation:
\s+ one or more spaces (?= followed by (positive lookahead) \w+ one or more word characters : literal `:' (colon character) )
Using:
Let's go through the array, divide each element into :
(colon). The left side of key
can be used to call the function, and the right side of value
can be passed as a parameter to the function. This should pretty much put you on the path for what you want to do from here.
Ruby example
search.rb
# 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
use search.rb
q = "foo:(hello world) bar:(-{bad things}) email: something@email.tld another:weird characters +=2{-52!%#^ final:end"; s = Search.new(q) s.exec
Exit
foo has (hello world) bar has (-{bad things}) email has something@email.tld another has weird characters +=2{-52!%
source share