2010-09-05 41 views
2

在JavaScript中,一个流行的正则表达式的是从文本剔除HTML标签。该代码是HTML码带的regexp问题

String.prototype.stripHTML = function() { 
      var reTag = /<(?:.|\s)*?>/g; 
      return this.replace(reTag, ""); 
     }; 

如果你试试这"<b>This would be bold</b>".stripHTML(),然后将其作为输出"This would be bold"。它不应该输出为""

不这个表达式说,比赛的一切与<开始,以>结束?为什么没有这个表达式开始在<b><和结束</b>>

+1

如果您使用stripHTML函数就像在PHP中一样是一个stripTags函数。所以你输出就好了。 – 2ndkauboy 2010-09-05 12:52:31

回答

4

您使用的是non-greedy修改。

(?:.|\s)*? 
     ^

这会导致匹配尽可能最短,而不是匹配最长匹配的默认值。

 
<b>This would be bold</b> 
^-^     ^--^  Non-greedy: <(?:.|\s)*?> 
^-----------------------^  Greedy : <(?:.|\s)*> 
1

在它不是一个贪婪的正则表达式,这意味着它匹配的第一>它横跨来临的时候,<b></b>是分开的比赛。

2

是的,但*?执行ungreedy比赛(简称赛):

var reTag = /<(?:.|\s)*?>/g; 

要执行芦苇匹配(最长可能的匹配),删除?

var reTag = /<(?:.|\s)*>/g;