2010-09-30 89 views
0

我有一個java函數從任何網站的HTML頁面源中提取字符串......該函數基本上接受網站名稱以及術語搜索。現在,這個搜索詞總是包含在JavaScript標籤中。我需要做的是拉動包含搜索詞的整個javascript(在標籤內)。基於字符串中的術語提取「包容」字符串

下面是一個例子 -

<script type="text/javascript"> 
    //Roundtrip 
    rtTop = Number(new Date()); 

    document.documentElement.className += ' jsenabled'; 
</script> 

對於JavaScript的上面的代碼片段,我的搜索詞將是 「rtTop」。一旦找到,我希望我的函數返回包含腳本標記內所有內容的字符串。

任何新穎的解決方案?謝謝。

+0

java.equals(javascript)== false是true – 2010-09-30 18:34:15

+2

@ org.life.java:OP不等於java和javascript。他正在編寫一個java函數,將JavaScript代碼從HTML字符串中提取出來。基本上它是一個HTML解析器,只需要做一件事。事實上,它正在尋找的字符串是沒有真正相關的問題。 – 2010-09-30 18:43:02

+0

@JacobM哦,我的錯誤,巴士仍然是上述評論是真實的:-) – 2010-09-30 18:44:30

回答

1

我希望我能在JacobM的回答只是註釋行,但我想我需要更多的stackCred。

您可以使用HTML解析器that's usually the better solution。這就是說,對於有限的範圍,我經常使用regEx。這是一個卑鄙的野獸,雖然。我對JacobM模式的一個改變是用[^ <] +

替換開始元素中的屬性即使「類型」不存在或者它還有其他一些怪異。我也會包裹。*?與parens使稍後使用值更容易一些。

*更新* 借用雅各布的答案。我會改變一些模式來處理多個元素。

String someHTML = //get your HTML from wherever 
String lKeyword = "rtTop"; 
String lRegexPattern = "(.*)(<script[^>]*>(((?!</).)*)"+lKeyword +"(((?!</).)*)</script>)(.*)"; 
Pattern pattern = Pattern.compile(lRegexPattern ,Pattern.DOTALL); 
Matcher myMatcher = pattern.matcher(someHTML); 
myMatcher.find(); 
String lPreKeyword = myMatcher.group(3); 
String lPostKeyword = myMatcher.group(5); 
String result = lPreKeyword + lKeyword + lPostKeyword; 

這種模式的實例可以是found here。就像我說的,通過正則表達式解析HTML可以真正快速地得到真正的醜陋。

+0

Ug,還沒有足夠的聲譽尚未發表評論是一種痛苦。這個評論實際上是JacobM的回答。 (。*?rtTop *?)的捕獲組應該改爲(。*?rtTop *?。*?)以解釋關鍵字後的字符rtTop – Snekse 2010-09-30 20:16:01

+0

非常感謝@Snekse。對正則表達式的小修改修正了它。現在,刷新我的正則表達式的知識:) – rs79 2010-09-30 20:47:36

+0

另一個後續問題 - 在我的正則表達式中,我可以說明不區分大小寫的匹配嗎?例如,即使搜索條件是「rtTop」,我希望匹配被註冊爲「RTTOP」,「rttop」等。 – rs79 2010-10-01 15:43:22

2

你可以使用正則表達式沿

String someHTML = //get your HTML from wherever 
Pattern pattern = Pattern.compile("<script type=\"text/javascript\">(.*?rtTop.*?)</script>",Pattern.DOTALL); 
Matcher myMatcher = pattern.matcher(someHTML); 
myMatcher.find(); 
String result = myMatcher.group(1); 
+0

因此,如果我有一個存儲整個HTML頁面源的字符串變量,我將如何使用正則表達式? – rs79 2010-09-30 19:28:15

+0

編輯添加使用正則表達式的示例代碼。 – 2010-09-30 19:46:29