我需要使用正则表达式和Regex删除Javascript标记

时间:2010-06-15 10:26:10

标签: java regex

我需要从网页的HTML代码中删除所有Java Script标签及其间的内容和样式标签。到目前为止,我已经提出了这个表达式:

"(<[ \r\n\t]*script([ \r\n\t>]|>){1,}([ \r\n\t]|.)*?</[ \r\n\t]*script[ \r\n\t]*>)|(<[ \r\n\t]*noscript([ \r\n\t>]|>){1,}([ \r\n\t]|.)*?</[ \r\n\t]*noscript[ \r\n\t]*>)|(<[ \r\n\t]*style([ \r\n\t>]|>){1,}([ \r\n\t]|.)*?</[ \r\n\t]*style[ \r\n\t]*>)"

我使用JRegex库来处理正则表达式。当我在任何一个正则表达式测试器中测试它时它工作得很好,但是一旦我运行我的程序 - 这一切都崩溃了这个错误报告:

Exception in thread "Thread-0" java.lang.StackOverflowError
    at java.util.regex.Pattern$BranchConn.match(Unknown Source)
    at java.util.regex.Pattern$BmpCharProperty.match(Unknown Source)
    at java.util.regex.Pattern$Branch.match(Unknown Source)
    at java.util.regex.Pattern$GroupHead.match(Unknown Source)
    at java.util.regex.Pattern$LazyLoop.match(Unknown Source)
    at java.util.regex.Pattern$GroupTail.match(Unknown Source)
    at java.util.regex.Pattern$BranchConn.match(Unknown Source)
    at java.util.regex.Pattern$CharProperty.match(Unknown Source)
    at java.util.regex.Pattern$Branch.match(Unknown Source)
    at java.util.regex.Pattern$GroupHead.match(Unknown Source)
    at java.util.regex.Pattern$LazyLoop.match(Unknown Source)
..................................

它一直在继续。如果有人能就这一点给我一个建议 - 我将非常感激。

2 个答案:

答案 0 :(得分:1)

为什么不使用HTML解析器,只删除<script><style>个节点?

答案 1 :(得分:0)

我可以解决这个问题。我使用正则表达式来删除脚本标记以及使用此正则表达式在脚本标记之间的内容:

@"<(script|SCRIPT)[^+]*?>[^>]*?<(/\script|SCRIPT)>"