2012-02-01 40 views
0

比賽和第二個字符的第一個字符圖案比方說,我有以下字符串:正則表達式替換的帽

"a test-eh'l" 

我想爲每個字的開始。一個字可以用空格,撇號,連字號,斜線,經過一段時間,等分開所以我希望字符串變成這樣:

"A Test-Eh'L" 

我不是太擔心得到第一從gsub調用中大寫字母,因爲事後很容易做到這一點。但是,當我使用IRB和匹配方法時,我似乎只得到一個結果。當我使用掃描時,它會收集匹配,但問題是我無法真正做到,因爲我需要替換原始字符串的內容。

這是我到目前爲止有:

"a test-eh'a".scan(/[\s|\-|\'][a-z]/) 
=> [" t", "-e", "'a"] 

"a test-eh'a".match(/[\s|\-|\'][a-z]/) 
=> #<MatchData " t"> 

然後,如果我使用GSUB嘗試的模式:

"a test-eh'a".gsub(/[\s|\-|\'][a-z]/, $1) 
TypeError: can't convert nil into String 

在JavaScript中,我通常會使用括號,而不是放在方括號內的前部。但是,這樣做時我在掃描調用中沒有得到正確的結果。

"a test-eh'a".scan(/(\s|\-|\')[a-z]/) 
=> [[" "], ["-"], ["'"]] 

"a test-eh'a".gsub(/(\s|\-|\')[a-z]/, $1) 
=> "a'est'h'" 

任何幫助,將不勝感激。

+0

可以在替換字符串一樣使用1捕獲組:''\ 1''。 – 2012-02-01 14:59:00

回答

2

試試這個:

"a test-eh'a".gsub(/(?:^|\s|-|')[a-z]/) { |r| r.upcase } 
# => "A Test-Eh'A" 
+0

這將工作,非常感謝。 – agmcleod 2012-02-01 15:04:37