RegEx问题或者可能是另一种解决方案?

时间:2011-02-11 22:40:21

标签: javascript ruby regex scrape

我遇到的问题是我有一块JavaScript,我已经成功地从网站源码中删除了,现在我必须筛选以获得我正在寻找的具体值。

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

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

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

4 个答案:

答案 0 :(得分:2)

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

或者,由于Aaron似乎有abandoned RKelly,您可以尝试替换Johnson

答案 1 :(得分:2)

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

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

这将分为三部分:

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

然后用逗号分隔好东西。

答案 2 :(得分:1)

如果以旧方式执行该怎么办?

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

它不漂亮,但它有效。如果没有预告片,你可能需要为这种情况做些特别的事情。

答案 3 :(得分:1)

如何:\bflvFileName\s*:\s*("|')(?:\s*([^,\1\s]+)\s*,?)+(?<!,)\s*\1

你可能不得不逃避那些反斜杠;我不知道Ruby,但你会在.NET中。注意反向引用;这是上面的\1。我正在使用它来表明文件名包含在匹配的"'字符中。

所有\s可能都是不必要的,但我将它们留在那里是彻底的。我假设特殊字符周围可能有任意数量的空格(:",等。 YMMV。

另外:([^,\1\s]+)可能过于宽泛而无法描述文件名,具体取决于您认为有效的内容。您可能希望改为使用((?:\w|\.)+)

如果以上内容难以理解,请参考以下信息: regular-expressions.info/reference.html