String.prototype.stripHTML=function()
    {
       
       var tag=/<(.|\s)*?>/g;
       return this.replace(tag,"");
        
    }这个是取出HTML标记的,各位大哥能讲解下吗
为什么*?是紧挨着的,*表示0或多个,?表示0或1个,*不是已经包含?了吗还有匹配空白字符的
                            var tag=/^\s*(.*?)\s+$/
中间.*? 可以写成.*吗   

解决方案 »

  1.   

    (.|\s)* 匹配0个多个
    (.|\s)*?非贪婪匹配模式,会尽量匹配少的假如你<aaa>asdfa<bbb>
    不加问号会直接到最后一个>之前,加了就匹配第一个了>之前了
    另外直接写成
    <[^>]*>效率更高下面同理,
    贪婪和非贪婪模式
      

  2.   

    <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
    非贪婪模式匹配就会无限的回溯,尝试.匹配更多的内容以达到后面表达式成功,但这个尝试将是非常大的一个循环,有生之年是等不到退出了。