2011-09-05 72 views
2

我有以下的正則表達式:的Javascript分裂包括分隔符

(</?[a-z][a-z0-9]*[^<>]*>) 

我有以下文字:

<DIV><P class='abc'>Hello <B>Mister</B>! How are you >..< doing? </P> 
<I>I'm good</I></DIV> 

現在,我想分裂每個標籤的文本:

<DIV> 
<P class='abc'> 
Hello 
<B> 
Mister 
</B> 
! How are you >..< doing? 

</P> 
<I> 
I'm good 
</I> 
</DIV> 

我怎樣才能用Javascript正則表達式呢?
是能夠得到它的工作,但不得不重新開始,因爲JavaScript不支持lookbehinds。

(基本上劈在html標籤,並保持分隔符)

編輯:
我與這個目標是使用HTML存儲格式。我想將上面的html提供給一個JavaScript對象。 JavaScript對象將格式與文本分開,並執行操作A來格式化對象,操作B用於常規文本。

我知道這聽起來有點含糊,但我不想透露太多關於該項目。

+0

出於好奇,有沒有你想用正則表達式解析HTML理由嗎?除非你對輸入有很大的控制,[你可能有一些問題](http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html)。 – NT3RP

+2

首先,你的HTML是無效的,因此很難分析 - '> .. <'應該被編碼爲'> ..&lt'。其次,[用正則表達式解析HTML會讓靈魂陷入生活的領域](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454# 1732454)。 – shesek

回答

4

我在這個問題上我實際上同意奧馬爾,但我仍然會給你正則表達式。 :)

\<[^>]+?>|.+?(?=(?:<[^><]+?>|$)) 
+0

謝謝,小問題:如果html以一段文本結束,它不起作用。我如何解決這個問題? (現在它必須以標籤結尾) – Zyphrax

+0

如果有一個'>>」>'? – 6502

+0

@Zyphrax我爲你編輯它。 –

1

這是無限次提及的。正則表達式不是正確的工具。正則表達式適用於小而短的有限數量的文本。諸如檢查和驗證用戶輸入。

我建議你多瞭解一下瀏覽器的DOM模型。每個標籤都是DOM中的一個對象,可以使用JavaScript進行選擇,也可以引用。你可以用這種方式玩你的數據。

0

現在無法測試,但對於

/(<\/?[a-zA-Z]+([^"]|"(\\.|[^"])*")*>)|([^<]|<[^a-zA-Z])*/