司徒正美文章里的示例,去除HTML标签。var html = "<a href=\"http://www.cnblogs.com/rubylouvre/\" \nalt=\"hoho\">Ruby Louvre</a>by <em>司徒正美</em>";
var text = html.replace(/<(.|\s)*?>/g,"");
alert(text);
核心部分就是这个了
/<(.|\s)*?>/g我的理解是“.”匹配非空,再加个“|\s”,匹配了换行和回车。大概相当于“或”?所以就匹配了所有字符。我的问题是“*?”这两个字符为什么是必须的?说以下我的理解,您可以不看。“*”是软性量词,如果是不加的话不能去掉任意个匹配的字符,那还可以解释。
但是“?”不是懒惰量词的意思吗,默认是贪婪?那加与不加不只是工作方式的区别?(意思是结果也可能不同?)

解决方案 »

  1.   

    如果字符串只有一对括号<>那 *与*?就是相同滴
    但是如果是多个的话 加上? 比如找到<那就匹配到最近的一个不是>滴 然后continue
      

  2.   

    我的理解是“.”匹配非空,再加个“|\s”,匹配了换行和回车。大概相当于“或”?所以就匹配了所有字符。
    正解!但是“?”不是懒惰量词的意思吗,默认是贪婪?那加与不加不只是工作方式的区别?(意思是结果也可能不同?)加与不加肯定有区别的!/<(.|\s)*?>/g 匹配html 标签如果没后面那个‘?’号。是贪婪 模式。匹配到最后一个 ‘>’如果 字符串是  asssss<p>sdgfa 
    都匹配 ‘p’如果字符串是 asssss<p>sd<p>gfa 
    第一个匹配出: p                p           2个组
    第2个匹配出: p>sd<p
      

  3.   


    *,+之类的叫做优先匹配,也就是说往只要符合要求,就往多了匹配
    "<a href=\"http://www.cnblogs.com/rubylouvre/\" \nalt=\"hoho\">Ruby Louvre</a>by <em>司徒正美</em>"就像你这个字符串,(.|\s)这个能匹配任何字符了,如果不加"?",他一下子匹配到了底,边">"这个最后的字符也匹配了,那正则中最后还剩下一个">",那这个"*"号会把匹配的字符给交出来给">"匹配,匹配成功 ,是整个字符串"<a href=\"http://www.cnblogs.com/rubylouvre/\" \nalt=\"hoho\">Ruby Louvre</a>by <em>",这样明显不合你的要求这个?应该叫做忽略优先匹配
    也就是往少了匹配
    匹配字符的时候,起先当作一个也不匹配,把控制权交给正则中的">",">"去匹配"a"字符,结果不成功,然后把控制权交还给"*"结果他成功了,然后再把控制权交给">"匹配" ",不成功,交还,"*"匹配成功了,就这样,你一个我一个的,匹配下去,直到匹配到字符">",正则中的">"匹配成功,也就是匹配了这么一段"<a href=\"http://www.cnblogs.com/rubylouvre/\" \nalt=\"hoho\">",并不是整段html
    反正就这和个意思了,估计没表达的太清楚csdn中有个叫"过客"的牛人,叫他来给你解释