5

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

要查看我的问题,请查看:Regex101:嵌套跨度

我想确保我得到了打开和关闭标签之间的所有内容。不管</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]*?)\\\\?">。还是行不通。我不知道如何告诉这个方法找到具有颜色样式属性的跨度和他的关闭标签之间的所有内容。

也许有人有解决方案?

4

2 回答 2

1

因此,您遇到的块是错误“ string contains unbalanced delimiters ”。

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

我认为您必须首先匹配所有跨度标签(与您找到的库)然后重新处理以找到您关心的标签来解决此问题。

于 2015-07-07T11:06:46.317 回答
1

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

于 2015-07-07T10:41:17.887 回答