正则表达式帮助:如何忽略每个不是CSS文件的路径

问题描述:

我在我的Git仓库中有一个CSS框架子模块,其中包括一堆README,component.json和其他文件。我不想修改或删除这些文件,因为我认为在将更新推送到子模块时会造成问题。然而Middleman想要处理它们。正则表达式帮助:如何忽略每个不是CSS文件的路径

我现在有这在我的config.rb文件:

# Ignore everything that's not a CSS file inside inuit.css 
ignore 'css/inuit.css/*.html' 
ignore 'css/inuit.css/*.json' 
ignore 'css/inuit.css/LICENSE' 

我怎么能表达这种与文件模式或正则表达式?

+1

如果你的名字中没有'.css'文件夹,这将有所帮助。 '_css'会更好。然后,这是一个使用与文件名末尾的'.css'匹配的正则表达式的问题。否则,你需要检查'inuit.css'是否是文件夹或文件。 – Shaz

+4

那些不是正则表达式。这些是文件匹配模式,或fileglobs。 –

+0

@AndyLester根据[Middleman的文档](http://middlemanapp.com/dynamic-pages/index.html),“你可以给'忽略'确切的源路径,文件名或正则表达式。” –

我不熟悉Middleman,但是这不工作?

ignore /^css\/inuit\.css\/.*(?<![.]css)$/ 
+0

这也需要一个'我'的标志,以便它可以处理“.CSS”文件,但如果你添加'我'是,那应该工作 - 它[通过我的测试用例](http://rubular.com/R/93F65OcOt3)。很好地利用[负面后顾](http://www.regular-expressions.info/lookaround.html#lookbehind)'(?

由于ignorecan take a regex,通过ignore一个Ruby正则表达式//代替的字符串""用一个文件名水珠。在正则表达式中,使用negative lookahead(?!)end-of-string anchor$检查文件名是否以“.css”结尾。

ignore /^ css\/inuit\.css\/ (?: [^.]+ | .+ \. (?!css) \w+ ) $/ix 

此正则表达式correctly handles all of these test cases

  • 应符合:
    • css/inuit.css/abc.html
    • css/inuit.css/thecssthing.json
    • css/inuit.css/sub/in_a_folder.html
    • css/inuit.css/sub/crazily.named.css.json
    • css/inuit.css/sub/crazily.css.named.json
    • css/inuit.css/LICENSE
  • 如果不匹配:
    • css/inuit.css/realcss.css
    • css/inuit.css/main.css
    • css/inuit.css/sub/in_a_folder.css
    • css/inuit.css/sub/crazily.css.named.css
    • css/inuit.css/sub/crazily.named.css.css

(?:)非捕获组的第一交替处理的文件没有扩展的情况下(否“”)。否则,第二种情况检查路径中的最后一个“。”没有后面跟着“css”,这将表示“.css”扩展名。

我使用x标志忽略正则表达式中的空格,以便我可以在正则表达式中添加空格以使其更清晰。