比如
<div>
123456
<div>
</div>
</div>
<div>
</div>
要怎么写一个正则才能匹配出上述的div标签?
let sText = "<div> 123456 <div> </div></div><div></div>"
let reg = xxx // 这里要怎么写呢?
sText.match(reg)// 预期: ["<div> 123456 <div> </div></div>", '<div></div>']
因为有嵌套的缘故,所以这里就不知道该怎么操作了,有没有熟悉的大哥来解惑一下?
前端js写的话可能比较费劲,貌似JavaScript不支持平衡组,如果支持平衡组的话就可以写,net下是支持平衡组的,嵌套的<div>标签:
<div[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>
意思就是当碰到<div>的时候将内容压入到堆栈中(分组是基于堆栈的形式保存),当碰到</div>的时候将堆栈的栈顶信息弹出,最后在判断如果堆栈的为空代表<div></div>封闭了,就输出内容。