使用XRegExp.matchRecursive进行嵌套跨度

时间:2015-07-07 10:27:30

标签: javascript html regex xregexp

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

要查看我的问题:Regex101 : nested span

我想确保我在open和close标签之间得到所有内容。无论我在里面找到多少</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>

我认为我的问题是因为我用作起始分隔符的正则表达式。正如doc中的解释,我们应该在正则表达式中添加一个转义反斜杠的级别。这就是我将此正则表达式作为起始分隔符<span style=\\\\?"color:([a-zA-Z\\s]*?)\\\\?">的原因。还是行不通。我不知道如何告诉这个方法找到具有颜色样式属性的span和他的close标签之间的所有内容。

也许有人有解决方案?

2 个答案:

答案 0 :(得分:1)

是否可以选择使用某种比正则表达式更强大的解析器?一般来说,后者不太适合解析非常规语言,即使它们可能提供某些扩展而不是&#34; pure&#34;理论意义上的正则表达式。

答案 1 :(得分:1)

因此您遇到的阻止是错误“ 字符串包含不平衡分隔符 ”。

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

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