请教js里的正则表达式问题 String.prototype.stripHTML=function() { var tag=/<(.|\s)*?>/g; return this.replace(tag,""); }这个是取出HTML标记的,各位大哥能讲解下吗为什么*?是紧挨着的,*表示0或多个,?表示0或1个,*不是已经包含?了吗还有匹配空白字符的 var tag=/^\s*(.*?)\s+$/中间.*? 可以写成.*吗 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 (.|\s)* 匹配0个多个(.|\s)*?非贪婪匹配模式,会尽量匹配少的假如你<aaa>asdfa<bbb>不加问号会直接到最后一个>之前,加了就匹配第一个了>之前了另外直接写成<[^>]*>效率更高下面同理,贪婪和非贪婪模式 <a href="aa.htm"> <font size=3> test </font></a>如果你写想匹配这个超链接,你可能会用<a开头,第一个</a>结尾,这样你可以写<a[\s\S]*?</a>这是非贪婪式匹配,意思是*?之前的内容,尽可能的少匹配,以求后面的表达式能先成功,每次检测[\s\S]成功后,下一次会先尝试匹配</a>,如果不成功,则返回再次使用*?前面的[\s\S]来匹配,直到第一次*?后面的表达式成功为止,如果字符串查询结束,则表达式匹配失败。<a[\s\S]*</a>这样的贪婪模式匹配,</a>就没有实际意义了。如果字符串是:<a href="aa.htm"> <font size=3> test </font></a><a href="bb.htm"> <font size=3> test2 </font></a>你匹配的结果将是第一个<a开始最后一个</a>结束的字符串,贪婪模式会有限尝试贪婪模式修饰的内容。尽可能多的让*前面的部分匹配,实在不行的情况下,才退回一步,尝试用*后面的表达式来匹配。因为非贪婪式匹配会每次匹配后都查看后一个表达式,并可能导致回溯问题。所以效率会明显下降,如果大量使用并且极端情况(事实上,极端情况经常发生),会导致正则引擎崩溃,进入无限循环。(正则是个标准,有的引擎内部做了判断,规避了无限循环的情况,.net中的没有屏蔽)例如:1,2,3,4,5,6,7,8,9,10,11,12,P这个字符串。规则是逗号分割的13项内容,最后一项是单字符P。你可以写:^(.*?,){11}P很好,不会有问题,但如果字符串变化,没有这个P,例如:1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12非贪婪模式匹配就会无限的回溯,尝试.匹配更多的内容以达到后面表达式成功,但这个尝试将是非常大的一个循环,有生之年是等不到退出了。 JavaScript原型上的toString到底是怎么运行的?大家来看看 js多个checkbox赋值 js搞的头都大了,大家可能也有我这样的问题 怎么显示系统时间?? 关于打印问题 急求一数字正则表达式 marquee的加速问题。 紧急求助!!!!!如何调用dll控件??? 非常简单的问题 请问,如何动态向select(下拉列表框)中添加项目,另外,如何取得当前的选项 html页面中因为调用ActiveX导致主进程阻塞的解决办法 如何在文本框添加图片
(.|\s)*?非贪婪匹配模式,会尽量匹配少的假如你<aaa>asdfa<bbb>
不加问号会直接到最后一个>之前,加了就匹配第一个了>之前了
另外直接写成
<[^>]*>效率更高下面同理,
贪婪和非贪婪模式
<font size=3>
test
</font>
</a>如果你写想匹配这个超链接,你可能会用<a开头,第一个</a>结尾,这样你可以写
<a[\s\S]*?</a>
这是非贪婪式匹配,意思是*?之前的内容,尽可能的少匹配,以求后面的表达式能先成功,每次检测[\s\S]成功后,下一次会先尝试匹配</a>,如果不成功,则返回再次使用*?前面的[\s\S]来匹配,直到第一次*?后面的表达式成功为止,如果字符串查询结束,则表达式匹配失败。<a[\s\S]*</a>
这样的贪婪模式匹配,</a>就没有实际意义了。如果字符串是:
<a href="aa.htm">
<font size=3>
test
</font>
</a>
<a href="bb.htm">
<font size=3>
test2
</font>
</a>
你匹配的结果将是第一个<a开始最后一个</a>结束的字符串,贪婪模式会有限尝试贪婪模式修饰的内容。尽可能多的让*前面的部分匹配,实在不行的情况下,才退回一步,尝试用*后面的表达式来匹配。因为非贪婪式匹配会每次匹配后都查看后一个表达式,并可能导致回溯问题。所以效率会明显下降,如果大量使用并且极端情况(事实上,极端情况经常发生),会导致正则引擎崩溃,进入无限循环。(正则是个标准,有的引擎内部做了判断,规避了无限循环的情况,.net中的没有屏蔽)例如:
1,2,3,4,5,6,7,8,9,10,11,12,P
这个字符串。规则是逗号分割的13项内容,最后一项是单字符P。
你可以写:
^(.*?,){11}P很好,不会有问题,但如果字符串变化,没有这个P,例如:
1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12
非贪婪模式匹配就会无限的回溯,尝试.匹配更多的内容以达到后面表达式成功,但这个尝试将是非常大的一个循环,有生之年是等不到退出了。