2010-11-13 51 views
1

我是新來的正則表達式,我需要幫助冷凝下面的代碼:重構正則表達式調用

def finalize 
    query = key 
    query.each { |word| word.gsub!(/\s/, '_') } 
    query.each { |word| word.gsub!(/\W/, '') } 
    yield [ query.join(":").downcase, key, aggregate_scores].flatten 
end 

主要是(亂)的字符串數組,我想凝結成一個查詢字符串,所有特殊字符被吹走,空格被下劃線替換,並且被冒號連接,所以我可以隨着他們的關鍵數組不變而產生新的字符串(查詢)。

回答

1

紅寶石鼓勵方法鏈接:

def finalize 
    query = key.map { |word| word.gsub(/\s/, '_').gsub(/\W/, '') }.join(":").downcase 
    yield [ query, key, aggregate_scores].flatten 
end 
0

一件事,你可以鏈gsubs在一起:

word.gsub!(/\s/, '_').gsub!(/\W/, '') 

我認爲這確實是相同的:

yield [key.collect {|word| word.gsub(/\s/, '_').gsub(/\W/, '').downcase}.join(":"), key, aggregate_scores].flatten 

但我也想知道爲什麼還要循環做gsubs。

yield [key.join(":").gsub(/\s/,'_').gsub(/[^\w:]/,"").downcase, key, aggregate_scores].flatten 

將它連接在一起,然後清理它,忽略冒號。唯一的問題是如果原始密鑰有冒號,因爲它們不會被剝離。

+0

不,不要做'word.gsub .gsub'!​​。 'gsub!'可以返回'nil',你會得到一個異常。使用'word = word.gsub.gsub' – Nakilon 2010-11-13 05:40:11