使用XRegExp.matchRecursive用于嵌套的跨

Using XRegExp.matchRecursive for nested spans

本文关键字:嵌套 用于 XRegExp matchRecursive 使用      更新时间:2023-09-26

我想实现一种方法来获得所有的内容之间的一个开放的span标签和它的关闭标签。问题是,有时我可以有嵌套的跨度,我想确保我的正则表达式不停止第一个结束跨度它看到。

Regex101: nested span

我想确保我得到了打开和关闭标记之间的所有内容。不管我能找到多少</span>

我找到了一个由Steven Levithan制作的图书馆,它可以满足我的需要。我的问题是,这些例子是基本的,我不确定我能实现我想要的。

我正在使用XregExp。matchRecursive方法。在这个例子中,他们给出了一个开始标签和一个结束标签。我的起始标签有点复杂,它看起来是这样的:<span style=''?"color:([a-zA-Z's]*?)''?">。问题是当我用这个分隔符执行这个方法时,我得到这个错误:字符串包含不平衡的分隔符。测试的字符串是:

<p style='"text-align:justify'">
    <span style='"font-size:12pt'">
        <span style='"color:Green'">
            <span style='"font-family:Verdana'">There is some content for a mm advertisment.There is some co</span>
            <span style='"font-family:Times New Roman'">ntent for a mm advertisment.</span>
        </span>
    </span>
</p>

我认为我的问题是因为我使用的正则表达式作为开始分隔符。正如文档中所解释的,我们应该在正则表达式中添加一级转义反斜杠。这就是为什么我尝试这个正则表达式作为开始分隔符:<span style=''''?"color:([a-zA-Z''s]*?)''''?">。还是不行。我不知道怎样才能让这个方法找到span中有color style属性和关闭标签之间的所有内容

也许有人有解决办法?

所以你碰到的块是错误"字符串包含不平衡的分隔符"。

这可能是因为您的开始分隔符只匹配测试输入中的一个开始span标记(指定颜色的那个),但是您的结束分隔符匹配所有四个结束span标记。

我认为您必须首先匹配所有 span标签(使用您找到的库),然后重新处理以找到您关心的标签。

是否可以选择使用某种比正则表达式更强大的解析器?一般来说,后者并不真正适合解析非正则语言,尽管它们在理论上可能提供了与"纯"正则表达式相比的某些扩展。