正则表达式嵌套标记中的父匹配值

时间:2016-01-20 12:35:22

标签: javascript regex

我使用javascript在Node.js中工作。

我想使用正则表达式来获取父div字符串。

例如:

<div class="first">
   <p> sample 1</p>
   <div class="second">
        <p>sample 2</p>
    </div>
 </div>

如何使用&#34;第一个&#34;?等级为div进行正则表达式但在第一个div内,第二个div也在那里。

我正在尝试以下正则表达式

 <div class="first">([\s\S]*?)<\/div>

我得到错误的比赛,从第一个div开始到第二个div结束。

任何想法都能找到父div值。

提前致谢。

更新:同意。 DOM应该解决我的问题。但我的HTML没有很好地形成和修改。如果我使用DOM读取文档,则会出错。任何替代方式。

1 个答案:

答案 0 :(得分:0)

你要找的是递归。 Javascript的正则表达式的实现不支持递归。事实上,唯一支持递归的正则表达式是Perl 5.10和Ruby 2.0 [Source]

这对您来说意味着您需要执行以下操作之一:

  1. 需要格式正确的XML输入,以便DOM不会崩溃(或修复XML的修改,以便输出有效的XML)
  2. 通过计算“div”的数量以及随后的“/ div”数来解析这个问题(这将是一场噩梦)
  3. 使用Perl 5.10+或Ruby 2.0+解析文件并将结果传递给您的Javascript程序
  4. 很明显,选项 1 是唯一合理的选择。