私はgsub
を使って、レールアプリの文字列の非単語文字を削除しようとしていました。私は、次のコードを使用:gsubの奇妙さ
somestring.gsub(/[\W]/i, '') #=> ""
をしかし、それは実際には間違っている、それは同様に手紙k
を削除します。正しいものは次のようになります。
somestring.gsub(/\W/i, '') #=> "kkk"
しかし、私の問題は、RSpecのを使用して、上記のコードが含まれているレールコントローラのユニットテストが動作しないということで、ユニットテストは、実際に渡されます。だから私はRSpecの
it "test this gsub" do
'kkk'.gsub(/[\W]/i, '').should == 'kkk'
end
上記のテストケースは失敗するにはかなり極端なテストケースを作成し、それが実際に渡されます。ここでの問題は何ですか?なぜテストは合格するのですか?
なぜテストに失敗しますか? '/ [\ W]/i'は私が見る限り、その仕事のための完全に有効な正規表現です。その場合、大括弧は不要ですが、何も傷つけることはありません。 –
あなたは実際にあなたの正規表現を 'irb'で試しましたか? '' kkk ".gsub(..)'それはうまく動作し、結果は "kkk"なので、テストに合格します。期待している結果は何ですか? – Casper
@Casper実際には '' kkk'.gsub(/ [\ W]/i、 '') 'を実行すると' '' 'となります。これと比較して、 '' kkk'.gsub(/ \ W/i、 '') 'を実行すると' 'kkk ''が返されます。 –