1

我遇到的问题是我已经成功地从网站源中抓取了一段 JavaScript,现在我必须筛选以获得我正在寻找的特定值。

我需要找到flvFileName并获取列出的所有文件名。在这种情况下,它是'trailer1,trailer2,trailer3'.

起初我开始使用正则表达式来匹配开始和结束标签,然后匹配文件名并将它们提取到一个数组中,但问题是列表中并不总是三个视频。可能有零个或多个,因此匹配不起作用。关于解决这个问题的任何想法不会让我继续滥用我的笔记本电脑?

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

4 回答 4

2

您可以尝试使用RKelly为您将 JavaScript 解析为 Ruby。

或者,由于 Aaron 似乎已经放弃了 RKelly,您可以尝试使用它的替代品Johnson

于 2011-02-11T23:07:08.297 回答
2

假设它是一个字符串(或者你可以让它成为一个字符串)

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

这会将事情分成三部分:

  • flvFileName之前的所有内容:'
  • 好东西
  • ', 年龄之后的一切

然后用逗号分隔好东西。

于 2011-02-11T23:21:36.413 回答
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 回答
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 回答