所以我有一个具有特定页面样式和 css 的项目。我已经把这些文件放到他们自己的目录 assets/#{type}/page-specific/
我正在尝试编写一个正则表达式规则来通知预编译器对它们进行处理。
这对于房子的 JS 方面非常有效,但事实证明 css 更加困难。
# page specific style files:
app/assets/stylesheets/page-specific/something.css.sass
app/assets/stylesheets/page-specific/default.css
app/assets/stylesheets/page-specific/home.css.scss
我在
config/initializers/assets.rb
中使用了这个正则表达式文件:Rails.application.config.assets.precompile << /(page-specific\/[^(css)]+.css)/
问题在于
[^(css)]
部分并不能完全满足我的要求,因为它会过滤掉任何包含 c 或 s 的内容。我真正在寻找的是一种匹配整个字符串“css”并在那里停止的方法。另外,我知道传统的观点是简单地以不需要页面特定样式表的方式编写样式,而是使用包含整个样式表的 application.css。我同意。然而,这是一个非常大的代码库,将这个 Rails 升级带回家有很大的时间压力,而且没有时间花在分析和重构这种性质的事情上。
我试过只制作定界符指令
[^\.]
在第一个点处停止,但是这在一些使用点作为分隔符的供应商样式表上会爆炸,例如 jquery.treeview.css.sass
.显然我可以只更改文件名,但我们是一个不断壮大的大团队,我想让规则尽可能灵活,这样我们就不会让文件偷偷溜进来,当他们没有得到时会在生产中爆炸预编译。
最佳答案
这个答案专门针对正则表达式。您正在寻找“缺少字符序列 css
”来代替 [^(css)]
.
此正则表达式采用与您类似的方法:
/(page-specific\/(?:(?!\.css).)++\.css)/
解释:
page-specific\/
从字面上匹配字符序列“ 特定页面/ ”。 (?:
打开一个非捕获组。 (?!\.css)
断言当前索引不是字符序列“ .css ”。 如果该断言在第一次匹配该组时失败,则当前部分将无法匹配(特定于页面的/.css 不好),否则这将终止组量化,因为我们已经匹配了 .css ,并返回到
\.css)/
完成。.
匹配除换行符以外的任何内容。 )++
关闭组并无限次地限定所有格(不回馈)。注意:Ruby 从 Ruby 1.9 开始支持所有格限定符。 \.css
从字面上匹配字符序列“ .css ”。 阅读更多:
但是,如果没有,这个正则表达式使用非贪婪修饰符来完成它:
/(page-specific\/.+?\.css)/
如
.+?
尽可能少匹配,结果捕获保证在第一个 .css
处结束。 .阅读更多:
PS:您可能忘记在
.css/
中对正则表达式末尾附近的点进行转义.Specified by:
http://www.tutorialspoint.com/ruby/ruby_regular_expressions.htm
关于ruby-on-rails - Rails 3 - 预编译文件夹中的所有 css、sass 和 scss 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24556312/