HTML代码条正则表达式问题

时间:2010-09-05 12:47:09

标签: javascript html regex

在javascript中,流行的正则表达式之一是从文本中删除HTML标记。代码是

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

如果您在"<b>This would be bold</b>".stripHTML()上尝试此操作,则输出为"This would be bold"。它不应该输出为""吗?

此正则表达式是否表示匹配以<开头并以>结尾的所有内容?为什么此正则表达式不是<的{​​{1}}开始,<b>的{​​{1}}结束

3 个答案:

答案 0 :(得分:4)

您正在使用non-greedy修饰符。

(?:.|\s)*?
         ^

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

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

答案 1 :(得分:2)

是的,但是*?执行不匹配的匹配(短匹配):

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

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

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

答案 2 :(得分:1)

这不是一个贪婪的正则表达式,意味着它匹配它遇到的第一个 ><b></b>是单独的匹配。