2016-03-28 9 views
0

Ich mache einen Suchalgorithmus und möchte alle Wörter in der Suchabfrage in Sternchen umschließen, um mit Teilabgleich zu helfen. Ich möchte auch nur einzelne Wörter umschließen, während ich Zitate ignoriere. Ein Beispiel dafür, was ich zu tun bin versucht:Gibt es in Rails eine elegante Möglichkeit, eine Zeichenfolge aufzunehmen und alle internen Wörter in einem bestimmten Zeichen zu verpacken?

'test test test' test2 test2 => 'test test test' *test2* *test2* 
"test test test" test2 test2 => "test test test" *test2* *test2* 

ich einen Algorithmus haben, der dies tut, aber es ist wirklich hässlich

split(/\s(?=(?:[^'"]|'[^']*'|"[^"]*")*$)/).map{|x| ["'", '"'].include?(x[0]) ? x+' ' : '*'+x+'* '}.join 

Gibt es eine elegantere railsian Art und Weise zu tun, was ich will ?

Antwort

1

Das wird funktionieren, wenn es Leerzeichen zwischen den Anführungszeichen und das Wort in Anführungszeichen sind, also bin ich nicht sicher, ob das für Sie oder nicht akzeptabel ist:

str = "'test test' test test 'test'" 
str.split(' ').map { |w| has_quotes?(w) ? w : "*#{w}*" }.join(' ') 

def has_quotes?(w) 
    w.include?('"') || w.include?("'") 
end 

erhalten Sie folgende Ausgabe:

"'test test' *test* *test* 'test'" 
Verwandte Themen