ruby-on-rails - Rails 3 - 预编译文件夹中的所有 css、sass 和 scss 文件

标签 ruby-on-rails regex asset-pipeline

所以我有一个具有特定页面样式和 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 ”。

  • visualization

    阅读更多:
  • Possessive Quantifiers
  • Lookahead and Lookbehind Zero-Length Assertions


  • 但是,如果没有,这个正则表达式使用非贪婪修饰符来完成它:
    /(page-specific\/.+?\.css)/
    

    .+?尽可能少匹配,结果捕获保证在第一个 .css 处结束。 .

    visualization

    阅读更多:
  • Greedy and Lazy Regex


  • 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/

    相关文章:

    ruby-on-rails - 我如何将 rspec 与已清理的 YAML 固定装置一起使用?

    ruby-on-rails - 什么是Edge Rails?

    regex - 如何在 perl 正则表达式中跨换行符匹配?

    ruby-on-rails - Rails Assets 管道 : How to set the Access-Control-Allow-Origin header when serving fonts in development?

    html - rails 设计一个循环

    javascript - 如何在 ruby​​ on rails 中为复选框设置值?

    java - 使用正则表达式在java中生成密码

    regex - Perl 正则表达式帮助 : character set, 文字反斜杠、引号字符

    ruby-on-rails - 如何只为开发环境要求 Assets

    ruby-on-rails-3 - 通过 Assets :precompile assets pipeline 为 IE 拆分 css 文件的最佳方法是什么