2011-09-05 55 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])*/