2011-02-11 73 views
1

我遇到的問題是,我有一段JavaScript,我已經成功地從網站源中刪除了,現在我必須篩選以獲取我正在尋找的特定值。RegEx問題或者可能是另一個解決方案?

我需要找到flvFileName並獲取列出的所有文件名。在這種情況下,它是'trailer1,trailer2,trailer3'

起初,我開始使用正則表達式匹配開始和結束標記,然後匹配文件名並將它們提取到數組中,但問題是列表中並不總是有三個視頻。可能有零個或多個,所以匹配不起作用。有什麼想法來解決這個問題,這不會讓我繼續濫用我的筆記本電腦嗎?

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

這是一個最後']'丟失或字符串的數組? – steenslag 2011-02-11 23:03:29

+0

示例JavaScript實際上很難讀取,因此我將其截斷爲緊鄰目標數據前後的部分。原始樣本在修訂歷史中可用。 – 2011-02-11 23:31:28

回答

2

假設它是一個字符串(或者你可以得到它是一個字符串)

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

這將在3個部分拆分事:

  • 之前一切flvFileName:「
  • 好東東
  • '之後的所有內容,年齡

然後用逗號分隔好東西。

1

如果你以舊的方式做到這一點?

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

它不漂亮,但它的工作原理。在沒有預告片的情況下,您可能需要爲案件做一些特別的事情。

+0

我編輯了你的答案,以消除稱呼。 StackOverflow更喜歡我們不會在問題和答案中使用稱呼,Valedictions或簽名。 – 2011-02-11 23:23:06

1

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

您可能需要逃避的反斜線;我不知道Ruby,但你會在.NET中。注意反向引用;這就是上面的\1。我用它來表示文件名被匹配"'字符。

所有的\s可能是不必要的,但我讓他們在那裏徹底。我假設特殊字符周圍可能會有空白(:,",,等)。因人而異。

另外:([^,\1\s]+)可能過於寬泛,無法描述文件名,這取決於您認爲有效的內容。您可能需要改用((?:\w|\.)+)

如果上面是很難神交一些參考信息: regular-expressions.info/reference.html

2

你可以嘗試使用RKelly解析JavaScript插入紅寶石爲您服務。

或者,由於Aaron似乎有abandoned RKelly,您可以嘗試更換,Johnson

+0

我並不需要真正將JS轉換爲Ruby。我只需要讀取輸出,並且由於佔位符在頁面加載時呈現爲JS,這足以解析HTML頁面。我確實閱讀了RKelly和Johnson。我相信我會在不久的將來再次訪問約翰遜。 – r3nrut 2011-02-14 17:43:59

相關問題