希望通过js来匹配出网页中的js代码段,包含<script ....>,只匹配出自己写的js代码 不要<script type="text/javascript" src="source/jquery.qtip.min.js"></script>
这种形式的var s ='<script type="text/javascript" src="image/plupload/plupload.js"></script><script type="text/javascript" src="image/plupload/plupload.flash.js"></script><script type="text/javascript" src="image/plupload/plupload.html4.js"></script><script type="text/javascript" src="image/plupload/plupload.html5.js"></script><script type="text/javascript">alert("test");</script>'
p = /<(script)\s+((language=['"]?javascript['"]?)|(type=['"]?text\/javascript['"]?))?\s*\/?>.*(?:<\/\1>)?/gi;
    var arr = new Array();
    while(arr = p.exec(s)) 
alert(arr[1]+','+arr[1]+','+arr[2]);
我希望输出<script type="text/javascript">alert("test");</script>
但是这个正则有问题   老是不能输出正确结果呢

解决方案 »

  1.   

    var s ='<script type="text/javascript" src="image/plupload/plupload.js"></script><script type="text/javascript" src="image/plupload/plupload.flash.js"></script><script type="text/javascript" src="image/plupload/plupload.html4.js"></script><script type="text/javascript" src="image/plupload/plupload.html5.js"></script><script type="text/javascript">alert("test");</script>'这个字符串有问题,脚本中不能包含'</script>',可以用'</scr' + 'ipt>'替换
      

  2.   

    var str ='<script type="text/javascript" src="image/plupload/plupload.js"><\/script><script type="text/javascript" src="image/plupload/plupload.flash.js"><\/script><script type="text/javascript" src="image/plupload/plupload.html4.js"><\/script><script type="text/javascript" src="image/plupload/plupload.html5.js"><\/script><script type="text/javascript">alert("test");<\/script>',
    reg = /<script\b[^<>]*>[^<>]+<\/script>/g;
    alert(str.match(reg));
      

  3.   

    要点:
    1.排除有src属性的
    2.启用多行模式
      

  4.   


    var s ="<scr"+"ipt type=\"text/javascript\" src=\"image/plupload/plupload.js\"></scr"+"ipt><scr"+"ipt type=\"text/javascript\" src=\"image/plupload/plupload.flash.js\"></scr"+"ipt><scr"+"ipt type=\"text/javascript\" src=\"image/plupload/plupload.html4.js\"></scr"+"ipt><sc"+"ript type=\"text/javascript\" src=\"image/plupload/plupload.html5.js\"></scr"+"ipt><scr"+"ipt type=\"text/javascript\">alert(\"test\");</scr"+"ipt>";
    p = /<script[^<]*?>([^<].+?)<\/script>/gi;
        var arr = new Array();
        while(arr = p.exec(s)) 
           document.write( arr[1] + "<br>");
      

  5.   

    LZ,您都赖得自己修改下下吗?就那样废结了前帖?<textarea id="test" style="width:600px;height:500px"><script type="text/javascript" src="image/plupload/plupload.js"></script><script type="text/javascript" src="image/plupload/plupload.flash.js"></script><script type="text/javascript" src="image/plupload/plupload.html4.js"></script><script type="text/javascript" src="image/plupload/plupload.html5.js"></script><script type="text/javascript">alert("test");</script>上面是你给定的字符串,下面的是论坛源码,删略是因为输入字符太长无法发帖,放一起提取是考虑正则的实际应用兼容性。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    .................................
    <title>通过正则匹配出js代码段(非src外部引用的)的问题 - Web 开发 / JavaScript</title>
    <link href="http://c.csdn.net/bbs/t/5/t5.css" rel="stylesheet" type="text/css" />
    <link href="http://www.csdn.net/images/favicon.ico" rel="SHORTCUT ICON" />
    <script type="text/javascript">
    var tinfo = {
        pdate: "2012-03-09 15:35:03"
        ,sid: "467d91e3-dd10-480b-a322-71b65e66c736"
        ,tid: "1f8cdf9c-3337-4f50-9976-49e857ee8214"
        ,ba: "WebDevelop"
        ,sa: "JavaScript"
    };
    </script>
    <script type="text/javascript" src="/u/t5/t5.js"></script>
    <script type="text/javascript" src="http://counter.csdn.net/a/js/AreaCounter.js"></script>
    </head>
    <body id="bbscsdn_wrap">
    <script src="http://csdnimg.cn/pubnav/js/pub_topnav.js" type="text/javascript"></script>
    <div class="nav"> 
    ............................
    <script type="text/javascript">
        setTimeout(function () {
            document.getElementById("frm_tt1").src = "/u/t5/include/topic_top.html";
        }, 5000);
    </script><div class="loc">
        <p>
    <!-- a href="http://wz.csdn.net/rxsg/index.aspx" target="_blank" onclick='LogClickCount(this,117);'><img src="http://c.csdn.net/bbs/t/5/i/rxsg.jpg" alt="热血
    ....................................<script type="text/javascript">
    new Image().src="http://forum.csdn.net/Common/TopicRead.ashx?postDate=2012-03-09+15%3a35%3a03&topicID=1f8cdf9c-3337-4f50-9976-49e857ee8214&"+(new Date
    ().getTime().toString(36));
    new Image().src="http://forum.csdn.net/PointForum/SetLatestVisitedForum.ashx?sectionid=467d91e3-dd10-480b-a322-71b65e66c736";
    </script>
    <script src="http://csdnimg.cn/pubfooter/js/publib_footer.js" type="text/javascript"></script><img alt="" src="http://counter.csdn.net/pv.aspx?id=185" border="0" width="0" height="0" style="display: none" />
    <div><script type="text/javascript" src="http://www.csdn.net/ui/scripts/Csdn/counter.js?v=1.1"></script></div><a style="float:right;" href="#" onclick="javascript:this.parentNode.style.display='none';return false;">[关闭]</a>
    <script type="text/javascript">
        try {
            var pdate = "" + parent.eval("tinfo.pdate");
            if (pdate) {
                pdate = new Date(pdate.replace(/-/g, "/"));
                var today = new Date();
                showad = (today.getTime() - pdate.getTime()) / 1000 / 60 / 60 / 24 > 30;
            }
        } catch (ex) { };
    showad=true;
        try {
            var ad_left = "";
            if (showad && screen.availWidth >= 1280) {
                ad_left += '<' + 'script type=\"text/javascript\">';
                ad_left += 'google_ad_client = "pub-1076724771190722";';
                ad_left += 'google_ad_slot =\"5633584852\";';
                ad_left += 'google_ad_width = 120;';
                ad_left += 'google_ad_height = 600;';
                ad_left += '</' + 'script>';
                ad_left += '<' + 'script type=\"text/javascript\"';
                ad_left += 'src=\"http://pagead2.googlesyndication.com/pagead/show_ads.js\">';
                ad_left += '</' + 'script>';
            }
            document.write(ad_left);
            document.getElementById("ad_left").style.display = "";
        } catch (e) { }
    </script>
    </div>
    <div id="ad_right" style="position:absolute;width:120px;top:184px;right:10px;display:none;">
    <a style="float:left;" href="#" onclick="javascript:this.parentNode.style.display='none';return false;">[关闭]</a>
    <script type="text/javascript">
        try {
            var ad_right = "";
            if (showad && screen.availWidth >= 1280) {
                ad_right += '<' + 'script type=\"text/javascript\">';
                ad_right += 'google_ad_client = "pub-1076724771190722";';
                ad_right += 'google_ad_slot =\"9259923286\";';
                ad_right += 'google_ad_width = 120;';
                ad_right += 'google_ad_height = 600;';
                ad_right += '</' + 'script>';
                ad_right += '<' + 'script type=\"text/javascript\"';
                ad_right += 'src=\"http://pagead2.googlesyndication.com/pagead/show_ads.js\">';
                ad_right += '</' + 'script>';
            }
            document.write(ad_right);
            document.getElementById("ad_right").style.display = "";
        } catch (e) { }
    </script>
    </div>
    <!--云计算的广告-->
    <script type="text/javascript" src="http://ag.csdn.net/js/jquery-1.4.1.min.js"></script>
    <script type="text/javascript">
        jQuery.noConflict();
    </script>
    <!--ibm ad-->
    <script type="text/javascript" src="http://event.blog.csdn.net/cloudad/ibm/ad.js?v=1"></script>
    <!--取消置顶-->
    <script type="text/javascript">
        function setUnTopLink() {
            var _url = "http://forum.csdn.net/PointForum/Manage/Tops/deleteTop.aspx";
            _url += "?topicUrl=" + encodeURIComponent(location.href);
            _url += "&sectionID=" + encodeURIComponent(tinfo.sid);
            var _click = "try{showWindow({url:'" + _url + "',width:600,height:265,title:'取消置顶'});}catch(ex){}return false;";
            var li = jQuery('<li><a href="#" onclick="' + _click + '">取消置顶</a></li>');
            li.insertAfter(jQuery('#a_head_recreate').parent().next());
        }
        setTimeout("setUnTopLink()",3000);
    </script>
    </body>
    </textarea>
    <script>var str =document.getElementById("test").value;str = str.match(/<(script)(?!.*src)[^>]*>(?!<\/?\1>)[\S\s]*?<\/\1>/gi, "").join("\n");alert(str)</script>
      

  6.   

    这下,你写的那段字符串和实际论坛源码,按您的要求正则提取JS代码片段,应该都OK了吧。。