1

私が抱えている問題は、ウェブサイトのソースから正常に削除したJavaScriptのブロックがあり、探している特定の値を取得するためにふるいにかける必要があることです。

flvFileNameリストされているすべてのファイル名を見つけて取得する必要があります。この場合は'trailer1,trailer2,trailer3'です。

最初は正規表現を使用して開始タグと終了タグを照合し、次にファイル名を照合して配列に抽出し始めましたが、問題は、リストに常に3つのビデオがあるとは限らないことです。ゼロ以上の可能性があるため、マッチングは機能しません。これにアプローチする方法について、ラップトップを悪用し続けないような考えはありますか?

... ,flashvars: {flvFileName: 'trailer1,trailer2,trailer3', age: 'no', isForced: 'true'} }); });
4

4 に答える 4

2

RKellyを使用してJavaScriptをRubyに解析してみてください。

または、アーロンがRKellyを放棄したように見えるので、代わりのJohnsonを試すことができます。

于 2011-02-11T23:07:08.297 に答える
2

それが文字列であると仮定します(または文字列にすることができます)

p str.split(/flvFileName: '|', age/)[1].split(',')
#=> ["trailer1", "trailer2", "trailer3"]

これにより、物事が3つの部分に分割されます。

  • flvFileNameの前のすべて: '
  • 良いもの
  • '、年齢以降のすべて

次に、良いものをコンマで分割します。

于 2011-02-11T23:21:36.413 に答える
1

古い方法でそれを行うとどうなりますか?

start = string.index(flvFileName)
quoteStart = string.index("'", start)
quoteEnd = string.index("'", quoteStart)
trailersString = string.slice(quoteStart, quoteEnd)
trailers = string.split(",")

美しくはありませんが、機能します。また、予告編がない場合は、特別なことをする必要があるかもしれません。

于 2011-02-11T22:48:35.467 に答える
1

次のようなものはどうですか?\bflvFileName\s*:\s*("|')(?:\s*([^,\1\s]+)\s*,?)+(?<!,)\s*\1

これらの円記号をエスケープする必要があるかもしれません。Rubyについてはわかりませんが、.NETではわかります。後方参照に注意してください。それは\1上記です。ファイル名が一致"または'文字でラップされていることを示すために使用しています。

すべて\sが不要かもしれませんが、徹底的にそこに残しておきます。:特殊文字( 、、、"など)の周りに空白がいくらかある可能性があると思い,ます。YMMV。

また([^,\1\s]+)、有効と思われるものによっては、ファイル名を説明するには広すぎる場合があります。代わりに使用することをお勧めします((?:\w|\.)+)

上記を理解するのが難しい場合のいくつかの参照情報: regular-expressions.info/reference.html

于 2011-02-11T23:01:17.897 に答える