0

我试图解析一个 javascript 文件以返回字体 url。

文件看起来像这样

@font-face {
  font-family: 'AlfaSlab';
  iesrc: url('/lib/assets/themes/ek/skins/default/alfaslabone-regular-webfont.eot');
  url('/lib/assets/themes/ek/skins/default/alfaslabone-regular-webfont.woff')

我想获取所有带有文件扩展名的字体链接(eot、woff、svg、otf)

我想出了这个正则表达式/(\/lib\/.*?\/.*?\.(eot|woff|ttf|svg))/,但它也返回文件扩展名(因为文件扩展名中的 () )

在红宝石中我这样做files.map {|file| File.read(file).scan(regex)} #=> ['/lib/assets/themes/ek/skins/default/alfaslabone-regular-webfont.eot','eot','/lib/assets/themes/ek/skins/default/alfaslabone-regular-webfont.woff','woff']

我如何修复正则表达式以仅返回文件路径而不是 2 个数组元素中的文件路径 + 文件扩展名,谢谢:)

编辑:

我想返回带有文件扩展名的整个路径,['/lib/assets/themes/ek/skins/default/alfaslabone-regular-webfont.eot','/lib/assets/themes/ek/skins/default/alfaslabone-regular-webfont.woff']应该是匹配的。谢谢你的时间

4

2 回答 2

3

您可以重写您的正则表达式:

/([\w\-\/]+\.(?:eot|woff|ttf|svg))/
  • [\w\-\/]定义一组字符:
    • \w单词字符,即字母(a-z, A-Z)、数字(0-9)和下划线(_
    • \-连字符 ( -)
    • \/斜线 ( /)
  • +表示这些字符中的一个或多个
  • \.是文件扩展名前的点
  • (eot|woff|ttf|svg)是文件扩展名
  • ?:告诉正则表达式引擎不要为此捕获组生成反向引用
于 2012-07-16T15:10:57.497 回答
0

看到你的评论后,我认为这个长的正则表达式会起作用。因为,正如您所说,将所有可能的扩展包含在“()”中将始终创建第二个数组元素

/(\/lib\/.*?\/.*?\.eot|\/lib\/.*?\/.*?\.woff)|\/lib\/.*?\/.*?\.ttf|\/lib\/.*?\/.*?\.svg)/

我不是 Ruby 专家,但你可以通过定义一个变量来概括一下

$v = "\/lib\/.*?\/.*?\."
$m = "("+$v+"eot|"+$v+"woff|"+$v+"ttf|"+$v+"svg)"
Regexp.new $m
于 2012-07-16T15:48:32.530 回答