2016-03-28 15 views
0

Arama algoritması yapıyorum ve kısmi eşleştirmede yardımcı olması için yıldızlarda arama sorgusundaki tüm kelimeleri sarmak istiyorum. Tırnakları görmezden gelerek tek kelimeyi de sarmak isterim. Yapmaya çalıştığım şey bu bir örnek:Bir dize almak ve tüm iç kelimeleri belirli bir karaktere sarmak için raylarda zarif bir yol var mı?

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

Bunu yapan bir algoritma var ama

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

istediğim eylemde daha şık bir railsian yolu var mı gerçekten çirkin ?

cevap

1

tırnak ve tırnak içindeki sözcüğün arasındaki boşluklar olmadığı sürece bu çalışacaktır, böylece size ya da değil kabul edilebilir olup olmadığını emin değilim:

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 

çıktısı verir:

"'test test' *test* *test* 'test'" 
İlgili konular