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-zA-Z)、数字(0-9)、アンダースコア(_
    • \-ハイフン(-
    • \/スラッシュ(/
  • +これらの文字の1つ以上を意味します
  • \.ファイル拡張子の前のドットです
  • (eot|woff|ttf|svg)ファイル拡張子は
  • ?:このキャプチャグループの後方参照を生成しないように正規表現エンジンに指示します
于 2012-07-16T15:10:57.497 に答える
0

あなたのコメントを見た後、私はこの長い正規表現が仕事をするだろうと思います。なぜなら、あなたが言ったように、可能なすべての拡張子を「()」で囲むと、常に2番目の配列要素が作成されるからです。

/(\/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 に答える