我的JavaScript中有一个RegEx,它应该从HTML字符串中移除空段落(即<p> </p>
和<p> </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> </p>';
parsedData += '<p> </p><p>also contains some empty paragraphs</p><p></p>';
parsedData.replace(/(<p\s+.*> <\/p>|<p\s+.*>\s*<\/p>)*/gm, "");
答案 0 :(得分:2)
虽然无法使用正则表达式解析HTML(因为HTML标记可以嵌套),但您可以使用正则表达式进行有限的字符串替换,包括您想要替换的类型。
在此示例中,您的正则表达式过于贪婪:<p\s*.*>
与<p>hello</p>
匹配,因为.*
选择器过于笼统且吞并了>hello</p
。尝试将.*
替换为[^>]*
,以防止表达式匹配匹配开始的标记之外的任何内容。
答案 1 :(得分:1)
迭代document.getElementsByTagName('p')
(如果DOM中不存在节点,将它们添加到未附加到DOM的新节点,并改为使用它)并检查它们的innerHTML
答案 2 :(得分:1)
我不确定你的正则表达式是否有效。当我尝试时,它无法替换萤火虫中的任何东西。这是一个可能的解决方案
parsedData.replace(/<p>( |\s*)<\/p>/gm, '')
答案 3 :(得分:0)
为了澄清,我会自己回答这个问题。 shyam和Imjohns3在下面的答案的组合起了作用:
parsedData.replace(/<p\s+[^>]*>( |\s)*<\/p>/gm, "");