之前的帖是介绍怎么删除<>之间的,但我去掉整段javascript代码,应该怎样写?谢谢…………例如:<SCRIPT language=JavaScript>
function checkemail(form)
{
  if(!form.LoginName.value){
    form.LoginName.focus();
    return false;
}
</script>

解决方案 »

  1.   

    如果只要删掉js的代码:
    string regex = @"^<script language=javascript>.*</script>";
    string result = Regex.Replace(input, regex, "");
      

  2.   

    恩……但是不一定是这样的包着,也可能是<script></script>
      

  3.   

    <script.*</script>
    <script[^>]*?>.*?</script>
    <script[^>]*?>[.\n]*?</script>
    <script[^>]*>([\s\S](?!<script))*?</script>以上四个都不行~~~
      

  4.   

    仍然不行,大家可以试试private void menuItem4_Click(object sender, System.EventArgs e)
    {
    WebClient astroWebClient = new WebClient();
    astroWebClient.Credentials = CredentialCache.DefaultCredentials;    string page2 = "http://www.21cn.com/"; Byte[] pageData = astroWebClient.DownloadData(page2);
    string pageHtml = Encoding.Default.GetString(pageData); //GB2312
    //pageHtml = Regex.Replace(pageHtml, @"<[^>]+>",""); Console.Write(StripHTML1(pageHtml));
    }public static string StripHTML1(string strHtml)
    {
    string strOutput = strHtml;
        
        //Regex regex1 = new Regex(@"<script.*</script>");
        //Regex regex1 = new Regex(@"<script[^>]*?>.*?</script>");
        //Regex regex1 = new Regex(@"<script[^>]*?>[.\n]*?</script>", RegexOptions.IgnoreCase);
        //Regex regex1 = new Regex(@"<script[^>]*>([\s\S](?!<script))*?</script>");
        Regex regex1 = new Regex(@"<script>[\s\S]+?</script>", RegexOptions.IgnoreCase);    bool a = regex1.IsMatch(strOutput);
        MessageBox.Show(a.ToString());
        strOutput = regex1.Replace(strOutput,"");
    //Regex regex2 = new Regex(@"<[^>]+>|</[^>]+>");
    //strOutput = regex2.Replace(strOutput,"");
    return strOutput;
    }
      

  5.   

    strOutput = regex1.Replace(strOutput,"");
    改为:
    strOutput = strOutput.Replace(regex1,"");
      

  6.   

    下面这段基本上对了,可是还是有bugRegex regex1 = new Regex(@"(?i)<script[^>]*>([\s\S](?!<script))*?</script([^>])*>", RegexOptions.IgnoreCase);
    strOutput = regex1.Replace(strOutput,"");Regex regex2 = new Regex(@"<[^>]+>|</[^>]+>");
    strOutput = regex2.Replace(strOutput,"");
      

  7.   

    try:regex r=new regex
    (@"<SCRIPT language=JavaScript>(.|\s)*?</script>",RegexOptions.IgnoreCase)r.replace(...);
      

  8.   

    bug是这样的:当js代码如下时:<SCRIPT LANGUAGE="JavaScript">
    document.writemmm");
    document.write("<script>\n");
    document.write("\n");
    </SCRIPT>由于中间出现了document.write("<script>\n");于是正则表达式子会把之前得到
    <SCRIPT LANGUAGE="JavaScript">
    document.writemmm");
    抛弃,然后从
    ("<script>\n");
    document.write("\n");
    </SCRIPT>
    这里继续截取,于是那段被抛弃的代码便去不到,大家有什么解决方案?想知道百度是怎么解决的
      

  9.   

    sorry,刚才是糊涂了。。
    如果如楼上所说,可以在regex最前面加^试试
      

  10.   

    其实呢这里已经实现了如果重叠的情况,可是不知是C#正则引擎的问题还是什么,只跳过了一个重复的<scritp>,第二个就跳不过,结果把之前的当作普通内容抛弃了<script[^>]*>([\s\S](?!<script))*?</script([^>])*>([\s\S](?!<script))*?   这里已经规定在未遇到结束的</script>之前遇到<script就不用理会
      

  11.   

    #region 去除HTML标记
            /// <summary>
            /// 去除HTML标记
            /// </summary>
            /// <param name="Htmlstring">包括HTML的源码 </param>
            /// <returns>已经去除后的文字</returns>
            public static string NoHTML(string Htmlstring)
            {
                //删除脚本
                Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase);
                //删除HTML
                Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"<!--.*", "", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "\"", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", "<", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", " ", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "\xa1", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "\xa2", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "\xa3", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "\xa9", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&#(\d+);", "", RegexOptions.IgnoreCase);            Htmlstring.Replace("<", "");
                Htmlstring.Replace(">", "");
                Htmlstring.Replace("\r\n", "");
                Htmlstring = HttpContext.Current.Server.HtmlEncode(Htmlstring).Trim();            return Htmlstring;
            }
            #endregion
      

  12.   

    非常感谢楼上的,不过有两个问题:1.HttpContext在2003在System.Web空间,但在2005没有
    2.仍然没有去掉<script></script>标签里面的内容不过字符转换的处理比较详细,再次感谢!
      

  13.   

    youstr=Regex.Replace(youstr, @"<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase);
    测试数据:
    <SCRIPT LANGUAGE="JavaScript">
    document.writemmm");
    document.write("<script>\n");
    document.write("\n");
    </SCRIPT>
    <SCRIPT LANGUAGE="JavaScript">
    document.writemmm");
    document.write("<script>\n");
    document.write("\n");
    </SCRIPT>
    正则模式:Singleline
    匹配数:2
    *******************
    <SCRIPT LANGUAGE="JavaScript">
    document.writemmm");
    document.write("<script>\n");
    document.write("\n");
    </SCRIPT>
    *******************
    <SCRIPT LANGUAGE="JavaScript">
    document.writemmm");
    document.write("<script>\n");
    document.write("\n");
    </SCRIPT>