对嵌套跨度使用 XRegExp.matchRecursive

Using XRegExp.matchRecursive for nested spans

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

要查看我的问题,请看这个:Regex101 : nested span

我想确保我得到了开始标签和结束标签之间的所有内容。不管我能在里面找到多少</span>

我找到了Steven Levithan制作的一个库,可以实现我的需求。我遇到的问题是这个例子是基本的,我不确定我能否实现我想要的。

我正在使用 XregExp.matchRecursive 方法。在示例中,他们给出了开始标记和结束标记。我的开始标签有点复杂,看起来像这样:<span style=\?"color:([a-zA-Z\s]*?)\?">。问题是当我用这个定界符执行这个方法时,我得到这个错误:string contains unbalanced delimiters。 测试的字符串是:

<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>

我认为我的问题是因为我将正则表达式用作开始定界符。正如 doc 中所解释的那样,我们应该在正则表达式中添加一个级别的转义反斜杠。这就是为什么我尝试使用此正则表达式作为开始定界符的原因:<span style=\\?"color:([a-zA-Z\s]*?)\\?">。还是行不通。我看不出如何告诉此方法找到具有颜色样式属性的跨度和他的关闭标记之间的所有内容。

也许有人有解决办法?

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

所以你遇到的问题是错误“string contains unbalanced delimiters”.

那是因为您的开始定界符仅匹配测试输入中的一个开始跨度标签(指定颜色的那个),但您的结束定界符与所有四个结束跨度标签匹配。

我认为您必须首先匹配 所有 跨度标签(与您找到的库)然后重新处理以找到您想要的关心.