python中的正则表达式用于过滤JS代码

时间:2015-10-20 15:55:20

标签: javascript python html regex

我是python的新手,我想使用正则表达式过滤html标签。我使用了以下功能:

(function(){
NTES.ajax.importJs('http://news.163.com/special/hot_tags_recommend_data/',function(){
varname1,name2,len1,len2,width1,width2,left2;
varloveData=['拎婚房待嫁北京爷们','请网友鉴定是否美女'];
if(hotTagsData.count&&hotTagsData.count>0){
varcode='#from=article',
html=[],
item={name:'',url:''};
for(vari=0;i<hotTagsData.data.length&&i<4;i++){
item=hotTagsData.data[i];
html.push(''+item.name+'');
if(i==1){name1=item.name;}
if(i==2){name2=item.name;}
}
html.push(loveData[0]);
html.push(loveData[1]);
NTES('#js-extraTagList').innerHTML=html.join('');
len1=name1.replace(/[^\x00-\xff]/gi,"aa").length;
len2=name2.replace(/[^\x00-\xff]/gi,"aa").length;
width1=Math.floor((len1/(len1+len2))*271);
width2=271-width1;
left2=96+width1+19;
NTES('.extra-tag-1').addCss('width:'+width1+'px');
NTES('.extra-tag-2').addCss('width:'+width2+'px;left:'+left2+'px;');
}
},'gbk');
})();

除了一些js函数之外,大多数标签和代码都可以删除,我遇到了一些问题:

replace

正如你所看到的,有很多这样的功能。所以如何使用正则表达式删除它们?非常感谢。

2 个答案:

答案 0 :(得分:1)

您的正则表达式:<\s*script[^>]*>[^<]*<\s*/\s*script\s*>不应该包含[^<]*。您应该保留仅用于匹配标签本身。相反,您应该使用非贪婪的*,通常在语法上表示为:*?,因此它看起来像<\s*script[^>]*>.*?<\s*/\s*script\s*>。你应该在任何地方改变它,包括样式标记和注释正则表达式。

这应该照顾大多数情况。但是,它仍然无法保护您免受'</script>'中包含字符串的标记的影响,尽管这种情况应该很少见。这种情况很可能很少,如果出现这种情况,你可以手动剥离它。

答案 1 :(得分:0)

我已经通过DataHerder的答案解决了这个问题。当我按照他说的方式更改我的正则表达式时。大部分代码都可以删除,但只有一点js代码没有。所以我看了原始的html代码,并且发现未删除的js代码如下所示: &lt; SCRIPT LANGUAGE =&#34; JavaScript&#34;&gt; var cpm_rdm = Math.random(); &LT; / SCRIPT&GT; &lt;! - 五分之一视窗020903 - &gt; &lt; SCRIPT type =&#34; text / javascript&#34;&gt; adInfoTempSc = {     SRC:&#34; HTTP://img2.126.net/ntesrich/2015/0922/1442887187409_89q7.swf" ;,     网址:&#34; HTTP://g.163.com/a CID = 37873&安培;值= 1760993544&安培;重定向= HTTP://e.cn.miaozhen.com/r/k=2012070& P =&6we7m放大器; RO = SM&安培; DX = 0&安培; RT = 2及NS = __ IP __&安培; NI = __ IESID __&安培; v = __ LOC __&安培; ND = __ DRA __&安培; NP = __ POS __&安培; NN = __ APP __&安培;○= HTTP://cars.fxauto.com.cn/ S500 / 003 /&#34 ;,     项:&#34; 8531446021442887975191892&#34; } 如果(cpm_rdm&GT; 0.6&安培;&安培; cpm_rdm&LT; 0.8){ document.write(&#39;&lt; scr&#39; +&#39; ipt type =&#34; text / javascript&#34; src =&#34; http://img2.126.net/ntesrich/ 2015/0901 / scbox-2015.09.01.js&#34;&GT;&LT; / SCR&#39; +&#39;&IPT GT;&#39); } &LT; / SCRIPT&GT; 我认为代码无法消除的共鸣是大写的,就像这样:&lt; SCRIPT LANGUAGE =&#34; JavaScript&#34;&gt;。所以我在我的正则表达式中加了一点。现在我可以过滤所有的标签和代码。再次。 正则表达式现在: re_cdata = re.compile(&#39; //&LT;!\&GT [CDATA \ [* // \] \。];&#39;,re.DOTALL) re_script = re.compile(&#39;&LT; \ S *脚本[^&GT;] *&GT。* LT;?\ S * / \ S *脚本\ S * GT;&#39;,re.DOTALL |如re.I) re_style = re.compile(&#39;&LT; \ S *式[^&GT;] *&GT。* LT;?\ S * / \ S *风格\ S * GT;&#39;,re.DOTALL |如re.I) re_br = re.compile(&#39;&LT峰; br \ S * /&gt;有&#39;) re_h = re.compile(&#39;&LT; /?\ W + * GT;&#39;,re.DOTALL) re_comment = re.compile(&#39;&LT;! - ?* - &GT;&#39;,re.DOTALL) re.I用于匹配大写