我有一个java函数从任何网站的HTML页面源中提取字符串...该函数基本上接受网站名称,以及要搜索的术语。现在,此搜索字词始终包含在javascript标记中。我需要做的是拉出包含搜索词的整个javascript(在标签内)。
这是一个例子 -
<script type="text/javascript">
//Roundtrip
rtTop = Number(new Date());
document.documentElement.className += ' jsenabled';
</script>
对于上面的javascript代码段,我的搜索字词为“rtTop”。一旦找到,我希望我的函数返回包含脚本标记内所有内容的字符串。
任何新颖的解决方案?感谢。
答案 0 :(得分: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);
答案 1 :(得分:1)
我希望我能评论JacobM的回答,但我想我需要更多的stackCred。
您可以使用HTML解析器that's usually the better solution。也就是说,对于有限的范围,我经常使用regEx。虽然这是一个卑鄙的野兽。我对JacobM模式的一个改变是用[^&lt;] +
替换开始元素中的属性即使“类型”不存在或者有其他奇怪之处,也可以匹配。我还要包装。*?随着parens使得稍后使用这些值更容易。
*更新* 借用JacobM的答案。我会稍微改变一下模式来处理多个元素。
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可以快速实现真正的丑陋。