Основы
образец строки:
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)
)
использование:
Итерация по массиву, разделение каждого элемента на :
(двоеточие). Левая сторона key
может использоваться для вызова функции, а правая сторона value
может быть передана в качестве параметра функции. Это должно в значительной степени направить вас на то, что вы хотите сделать отсюда.
Пример использования ruby
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
использовать 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
выход
foo has (hello world)
bar has (-{bad things})
email has something@email.tld
another has weird characters +=2{-52!%#^
final has end