我想删除掉HTML中的javascript的元素,所以我自己分析了下javascript的语法一般是是这样<script language="java">function dosomething()</script>,因此,我自己写了一个正则表达式来一般表示它;<script[\s]*[^<|^>]*>.*</script>,请问下,这有问题吗?我用它来过滤javascript元素的时候没有成功。

解决方案 »

  1.   

    直接这样试试
    <script.*?</script>
      

  2.   

    你要得到的是什么内容?
    function dosomething() 吗?
      

  3.   

    我要将javascript的内容从html源码中去掉,我用正则式来过滤
      

  4.   

    怪事~大家顺便帮我看看
    我在接答上面的楼主的时候 写了1楼的正则表达式 是可以匹配<script></script>的内容的
    可是在删除的时候 却出现问题了 好怪 帮忙看看^_^package lee;
    import java.util.regex.*;
    public class Test1 
    {
    public static void main(String[] args)
    {
    String s="ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd";
    String regex="<script.*?</script>";
    Pattern pt=Pattern.compile(regex);
    Matcher mt=pt.matcher(s);
    if(mt.find())
    {
    System.out.println(mt.group(0));
    String s2=mt.group(0);
    String s3=s.replaceAll(s2, "");
    System.out.println(s3);
    }
     
    }
    }
    运行后上面的输出为:
    <script language="java">function dosomething() </script>
    ddfadfasdf<script language="java">function dosomething() </script>ddddd
    也就是说 脚本居然没有被删除掉~!
      

  5.   


    public class Test1 {
    public static void main(String[] args) {
    String s = "ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd";
    String regex = "<script.*?</script>";
    String str = s.replaceAll(regex, "");
    System.out.println(str);
    }
    }
      

  6.   

    public class Test1 {
        public static void main(String[] args) {
            String s = "ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd";
    String regex = "(.*)(<script.*>.*</script>)(.*)";
    Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
    Matcher matcher = pattern.matcher(s);
    String result = s;
    if (matcher.matches()) {
    result = matcher.group(1);
    result = result + matcher.group(3);
    }
    System.out.println(result);
        }
    }这样就行了。
      

  7.   

    String regex = "<script.*?</script>";
    6楼正解,没什么好说的,呵呵
      

  8.   

    String 的repaceAll 方法签名:  public String replaceAll(String regex,String replacement)
        参数:
            regex - 用来匹配此字符串的正则表达式 也就是说它把你给的s2当作正则表达式做了解析。
    出错的地方就在那对()String regex = "<script language=\"java\">function dosomething\\(\\) </script>";
      

  9.   

    package testfile;
    import java.util.regex.*;
    public class ATest {
    public static void main(String[] args){
    String s="<script language=\"java\">function dosomething() </script>,因此,我自己写了一个正则表达式来一般表示它;";
    String regex="(<script.*?</script>)";
    Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE|Pattern.DOTALL); 
    Matcher matcher = pattern.matcher(s); 
    while(matcher.find()){
    System.out.println(matcher.group(1));
    s=s.replace(matcher.group(1),"");
    System.out.println(s);
    }
    }
    }
    我比较菜,不知道这个是不是你想要的结果,
      

  10.   

    package testfile;
    import java.util.regex.*;
    public class ATest {
    public static void main(String[] args){
    String s="<script language=\"java\">function dosomething() </script>,因此,我自己写了一个正则表达式来一般表示它;";
    String regex="(<script.*?</script>)";//过滤包括标签及标签里的内容
    String regex2="(<script[^>]*>[^<]*</script>)";//过滤包括标签及标签里的内容
    String regex3="<script[^>]*>([^<]*)</script>";//只过滤标签里的内容
    Pattern pattern = Pattern.compile(regex3,Pattern.CASE_INSENSITIVE|Pattern.DOTALL); 
    Matcher matcher = pattern.matcher(s); 
    while(matcher.find()){
    System.out.println(matcher.group(1));
    s=s.replace(matcher.group(1),"");
    System.out.println(s);
    }
    }
    }
      

  11.   

    public static void main(String[] args) throws ParseException {
            String s = "ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd";
            String regex = "<script.*?</script>";
            Pattern pt = Pattern.compile(regex);
            Matcher mt = pt.matcher(s);
            if (mt.find()) {
                System.out.println(mt.group());
                String s2 = mt.group();
                String s3 = s.replaceAll(
                    regex,//这里~!改了
                    "");
                System.out.println(s3);
            }
        }
      

  12.   

    回zhuche110,我发现一个问题,如果字符串里面出现\r \n的话用 .是不能表示它们的,我做过试验,也就是说对于正则式<script.*? </script>,只要出现\r\n那么就无法匹配了。所以要用的时候要先用\s+去掉这种字符。
    另外我问一个问题,你的正则式简洁,但是为什么中间有一个?呢,是用来修饰.*的吗? 还有我的正则式有错误的地方吗?
      

  13.   

    public static void main(String[] args) throws ParseException {
            String s = "ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd";
            String regex = "<script.*?</script>";
            Pattern pt = Pattern.compile(regex,Pattern.DOTALL);//这个模式就可以了。.可以匹配任何的!
            Matcher mt = pt.matcher(s);
            if (mt.find()) {
                System.out.println(mt.group());
                String s2 = mt.group();
                String s3 = s.replaceAll(
                    regex,
                    "");
                System.out.println(s3);
            }
        }