【问题标题】:Javascript split include delimitersJavascript拆分包括分隔符
【发布时间】:2011-09-05 16:37:41
【问题描述】:

我有以下正则表达式:

(</?[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 不支持后视。

(基本上是在html标签上拆分并保留分隔符)

编辑:
我的目标是使用 html 来存储格式。我想将上面的 html 提供给一个 javascript 对象。 javascript 对象将格式与文本分开,并为格式化对象执行操作 A,为常规文本执行操作 B。

我知道这听起来有点含糊,但我不想透露太多关于这个项目的信息。

【问题讨论】:

标签: javascript regex split


【解决方案1】:

我实际上同意 Omar 在这个问题上的观点,但无论如何我都会给你正则表达式。 :)

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

【讨论】:

  • 谢谢,小问题:如果 html 以一段文本结尾,它就不起作用。我该如何解决? (现在它必须以标签结尾)
  • 如果有&lt;input type=button value="&gt;&gt;&gt;"&gt;呢?
  • @6502 可能有一些边缘情况会破坏任何正则表达式。请参阅 shesek 在对 OP 的评论中的链接。 :)
  • 这是一个常见的误解。虽然确实没有正则表达式可以解析 html 文档(或任何分层语法),但这并不意味着正则表达式不能解析标签。
【解决方案2】:

这已被无数次提及。正则表达式不是执行此操作的正确工具。正则表达式适用于小、短和有限的文本。检查和验证用户输入之类的。

我建议您了解有关浏览器 DOM 模型的更多信息。每个标签都是 DOM 中的一个对象,可以用 JavaScript 选择,也可以引用。您可以通过这种方式处理您的数据。

【讨论】:

    【解决方案3】:

    现在不能测试,但是怎么样

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      • 2017-04-01
      • 2022-06-15
      • 1970-01-01
      相关资源
      最近更新 更多