我正在調試carrierwave。好有趣。我認爲這個問題可以歸結爲:正則表達式的樂趣。爲什麼這個正則表達式不匹配我的字符串?
內carrierwave_direct,有這樣的代碼:
if record.new_record? && record.send("has_#{attribute}_upload?") && record.key !~ record.send(attribute).key_regexp
的#key_regexp代碼是這樣的:
/\A#{store_dir}\/[a-f\d\-]+\/.+\.(?i)#{extension_regexp}(?-i)\z/
將計算得到這個當我調試:我的store_dir是這樣的:
「的故事/#{} model.id/main_images」
,我覺得有一個空白的 「/」 部分,因爲model.id爲零。
的record.key是這樣的:
「/stories/main_imagescache/20160319-1549-2202-5826/blueapronimage.jpg」
爲什麼它不符合現在?
它看起來像正則表達式有一個額外的斜槓,我不知道這是什麼部分是:
[a-f\d\-]+\/.+\.(?i)(jpg|jpeg|gif|png)(?-i)
這是任何數量之間自動對焦,數字或字母「 - 」,然後是「 /「,然後是任意數量的字母或數字,然後是」。「....
什麼是(?i)?
什麼是捕獲組?
什麼是(?-i)?
,我認爲這就是問題所在:
record.key !~ /\Astories/
true
這應該是假的。
將您的RegEx放入[RegExr](http://regexr.com/)或[Regex101](https://regex101.com /)。然後,您可以將鼠標懸停在部件上,它會完全告訴您它的功能。他們都有* Explain *部分,爲您解釋RegEx。 – Druzion