2010-09-30 87 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