通过正则匹配出js代码片段

xiaopai20 2012-03-12 01:13:36
希望通过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>
但是这个正则有问题 老是不能输出正确结果呢
...全文
189 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
prototyper 2012-03-12
  • 打赏
  • 举报
回复
这下,你写的那段字符串和实际论坛源码,按您的要求正则提取JS代码片段,应该都OK了吧。。。。。
prototyper 2012-03-12
  • 打赏
  • 举报
回复
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="https://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="https://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 = "https://forum.csdn.net/PointForum/Manage/Tops/deleteTop.aspx";
_url += "?topicUrl=" + encodeURIComponent(location.href);
_url += "§ionID=" + 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>

myvicy 2012-03-12
  • 打赏
  • 举报
回复

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>");
DeathSteps 2012-03-12
  • 打赏
  • 举报
回复
要点:
1.排除有src属性的
2.启用多行模式

峭沙 2012-03-12
  • 打赏
  • 举报
回复
			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));
Acesidonu 2012-03-12
  • 打赏
  • 举报
回复
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>'替换

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧