2016-03-28 8 views
0

私は検索アルゴリズムを作成しており、検索クエリのすべての単語をアスタリスクで囲み、部分一致を助けたいと考えています。私は引用符を無視しながら、単一の単語だけを折り返したい。私がやろうとしているものの例は次のとおりです。文字列を受け取り、指定された文字のすべての内部単語をラップするエレガントな方法がありますか?

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

私はこれを行いますが、それは

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

本当に醜いですアルゴリズムを持っている私が欲しいものをやってのよりエレガントなrailsian方法はあります?

答えて

1

引用符と二重引用符内の単語の間にスペースがない限りこれは動作しますので、それはあなたかのために許容された場合、私はわからないよ:

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 

この意志出力:

"'test test' *test* *test* 'test'" 
関連する問題