在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}}结束
答案 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>
是单独的匹配。