2013-08-20 31 views
0

我在我的JavaScript中有一個正則表達式,它應該從HTML字符串中刪除空段落(即<p> </p><p>&nbsp;</p>)。它在FF,Chrome,IE8中正常工作,但在IE9中失敗。在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, ""); 
+2

這就是您在嘗試使用RegExp解析HTML時得到的結果。您應該使用DOM提供的解析器函數。 – Teemu

回答

0

只是爲了澄清我會自己回答這個問題。下面的shyam和Imjohns3的答案組合做到了這一招:

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

雖然HTML無法使用正則表達式解析(因爲HTML標籤可以被嵌套),你可以使用正則表達式來使有限的字符串替換,包括你想使取代的類型。

在這個例子中,正則表達式是太貪婪:<p\s*.*>比賽,除其他事項外,<p>hello</p>,因爲.*選擇是過於籠統和吞噬>hello</p。嘗試將.*替換爲[^>]*以防止表達式匹配比賽開始時標籤外的任何內容。

+0

非常感謝,下面這行代碼提示:'parsedData.replace(/ *)(  | \ s)* <\/p>/gm,「」);'' – maze

1

遍歷document.getElementsByTagName('p')(如果在DOM中不存在的節點,將它們添加到不附加到DOM一個新的節點,並使用它),並檢查其innerHTML

1

我不確定你的正則表達式是否正常工作。當我嘗試時,它未能取代螢火蟲中的任何東西。這是一個可能的解決方案

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