RegEx错误地删除了IE9中的第一段

时间:2013-08-20 13:51:20

标签: javascript regex

我的JavaScript中有一个RegEx,它应该从HTML字符串中移除空段落(即<p> </p><p>&nbsp;</p>)。它在FF,Chrome,IE8中运行良好但在IE9中失败。在IE9中,第一段始终被删除。

var parsedData = '<p>this first paragraph is deleted in IE9</p>';
parsedData += '<p>can contain any number of paragraphs</p><p>&nbsp;</p>';
parsedData += '<p>&nbsp;</p><p>also contains some empty paragraphs</p><p></p>';

parsedData.replace(/(<p\s+.*>&nbsp;<\/p>|<p\s+.*>\s*<\/p>)*/gm, "");

4 个答案:

答案 0 :(得分:2)

虽然无法使用正则表达式解析HTML(因为HTML标记可以嵌套),但您可以使用正则表达式进行有限的字符串替换,包括您想要替换的类型。

在此示例中,您的正则表达式过于贪婪:<p\s*.*><p>hello</p>匹配,因为.*选择器过于笼统且吞并了>hello</p 。尝试将.*替换为[^>]*,以防止表达式匹配匹配开始的标记之外的任何内容。

答案 1 :(得分:1)

迭代document.getElementsByTagName('p')(如果DOM中不存在节点,将它们添加到未附加到DOM的新节点,并改为使用它)并检查它们的innerHTML

答案 2 :(得分:1)

我不确定你的正则表达式是否有效。当我尝试时,它无法替换萤火虫中的任何东西。这是一个可能的解决方案

parsedData.replace(/<p>(&nbsp;|\s*)<\/p>/gm, '')

答案 3 :(得分:0)

为了澄清,我会自己回答这个问题。 shyam和Imjohns3在下面的答案的组合起了作用:

parsedData.replace(/<p\s+[^>]*>(&nbsp;|\s)*<\/p>/gm, "");