我正在试图找出如何在任何字符串之前匹配任何.css文件名,而不是以下划线开头。我在stackoverflow(ActiveAdmin assets precompile error)上找到了一个很好的起点:
[/^[^_]\w+\.(css|css.scss)$/]
但是,此正则表达式仅匹配没有下划线的filename.css。我希望有一个正则表达式匹配文件名之前的任何路径没有下划线。以下字符串应匹配:
mystyle.css
application.css.scss
/assets/stylesheets/application.css
但以下字符串不匹配:
_mystyle.css
_application.css.scss
/assets/stylesheets/_application.css
任何帮助都将不胜感激。
答案 0 :(得分:2)
这应该有效:
/^(.*?\/)?[^_]\w*\.(css|css\.scss)$/
说明:
(.*?\/)? # Means it accepts any characters upfront, ending with a slash,
# then the filename. The ? makes it optional.
答案 1 :(得分:2)
这样的事情应该有效:
/(.+\/|^)[a-z0-9\.]+\.s?css$/
并非所有ruby版本都支持它,但你也可以尝试使用负面预测:
/.+\/?(?!_)\w+\.s?css$/
答案 2 :(得分:1)
假设输入始终是文件路径,我宁愿这样做:
File.basename(file_path).match(/_.*(css|scss|sass)/)
正则表达式难以阅读,因此为了提高代码可读性,最好尽可能少地使用它。
此外,如果您正在进行其他匹配,则可能需要在其他正则表达式中提取css文件扩展名,如
css_exts_regexp = /(css|scss|sass)/
File.basename(file_path).match(/_.*#{css_exts_regxp}/)