我正在开发一个HTML到OOXML的转换器,并且嵌套列表存在一些问题,我试图使用正则表达式来捕获它们。
想象一下以下列表项用例
<li>Hi</li>
-只是一些文字,应该忽略<li><ul><li>hi</li></ul></li>
-直接在<li>
<li>Hi<ul><li>hi</li></ul></li>
-嵌套列表之前的纯文本<li><strong>Hi</strong><ul><li>hi</li></ul></li>
-嵌套列表之前的HTML内容 https://regexr.com/3rvch处理2.
和3.
,但是我似乎无法对4.
进行排序。 4的主要问题是它还需要允许HTML标记,但需要忽略</li>
。我一直在尝试https://regexr.com/3rvem的方法,但是无法使其正常工作。
正则表达式需要获取:
<li>
之后,<(ul|ol>
之前的内容<ul|ol>
块及其内容答案 0 :(得分:1)
将recursive regex与conditional结合使用以捕获不包含<[uo]l>
的嵌套标记,使用capturing group捕获嵌套标记的想法如何。这有点实验性,但似乎可行。
<li>(?>[^<]+|(<[uo]l)>|<(?!\/?li)[^>]*>|(?R))*<\/li>(?(1)|(*F))
(<[uo]l)>
的第一个if group 1 set捕获列表标记(如果<li>
中存在)(?R)
的意思是:将整个正则表达式粘贴到此处(递归)(?(1)|(*F))
的意思是:See this demo at regex101 for testing好,什么都不做,否则失败(*F)
= (?!)
{{3}}(由于输入速度太慢,它可能会因为正则表达式过慢而失败)