2012-11-17 35 views
0

所以基本上,我有這樣的:如何正則表達式替換段落中少於3個字符的段落?

str.replace(/<p><\/p>|<p>\.<\/p>/g); 

試圖刪除一無所有或少於3個字符內的所有段落。正則表達式的第一部分正常工作,但是像這樣的段落:<p>.</p>不會被刪除。對不起,新手問題。

+0

'\ .'只匹配文字點字符。那是你想要測試的嗎? –

回答

1

試試這個正則表達式。 /<\s*(p|P)[^>]*>([^<.]{0,3}|\..{1,2}|.{1,2}\.)<\s*\/(p|P)\s*>/g 這將匹配<p>標記,不區分大小寫,段落可以具有不同的屬性。

例子:

var str = "<p>test</p><p>t</p><P>tes</P><p class=\"someclass\">s</p><p>some long text</p>"; 
str.replace(/<\s*(p|P)[^>]*>([^<.]{0,3}|\..{1,2}|.{1,2}\.)<\s*\/(p|P)\s*>/g, ''); 

而且一個的jsfiddle例如:http://jsfiddle.net/Tkwk5/3/

+0

[^>]匹配除「<」之外的所有內容。它在那裏匹配與結束標記不同的全部內容。因此[^ <] {0,3}將匹配所有長度從0到3的不包含'>'的所有內容。 –

+0

啊......只是看到了問題的其餘部分......我會在一秒鐘內修復正則表達式。對不起 –

+0

它是固定的。我再次對自己不注意的事情感到抱歉。 –

1

使用以下正則表達式。

<p>.{0,2}</p> 
^any character, 0 - 2 times (you said less than 3) 

擺脫.作爲\.匹配文字.

下面是一個示範:http://jsfiddle.net/yQ5pu/1/

+0

我想知道空白是否應該算作一個字符 –

0
<p>[0-9A-Za-z]{0,2}</p> 

段落{0,2}不足3個OCCURENCES之間的任何字符或數字。

+0

「character」!=「letter」。空間是一個角色。 –

1

你不需要與標籤玩,瀏覽器提供了一個API所有這一切,運行更快,更容易錯誤/漏洞,以及煩人的「爲什麼我的瀏覽器被凍結?」怪癖。

var pTags = document.getElementsByTagName("p"); 

就是這樣。頁面中的每個標籤現在都是變量pTags內的文檔元素數組的一部分。

然後,您可以檢查什麼的任何給定的屬性標記[I]內,並通過將其刪除:

pTags[i].parentNode.removeChild(pTags[i]); 

當然還有其他的方式來使用the DOM API這一點。