我有以下案文
<pattern name="pattern1"/>
<success>success case 1</success>
<failed> failure 1</failed>
<failed> failure 2</failed>
<unknown> unknown </unknown>
<pattern name="pattern4"/>
<pattern name="pattern5"/>
<success>success case 3</success>
<pattern name="pattern2"/>
<success>success case 2</success>
<otherTag>There are many other tags.</otherTag>
<failed> failure 3</failed>
<pattern name="pattern3"/>
<unknown>unkown</unknown> 正则表达式<failed>[\w|\W]*?</failed>与包含失败标记的所有行匹配。
如果我想要所有失败的标签和失败标签上方的模式标签,我需要做什么。如果在模式标签下没有失败的标记,那么模式标记不应该匹配吗?基本上,我希望得到以下输出:
<pattern name="pattern1"/>
<failed> failure 1</failed>
<failed> failure 2</failed>
<pattern name="pattern2"/>
<failed> failure 3</failed>我在javascript中这样做,我不介意做一些中间步骤。
编辑启动,几乎所有的回复程序都建议我采用不同的方法。我不知道该采取哪种方法。JQuery,regex等。我在这里提供更多的信息,以便做出更好的决策。数据格式会改变,但不会经常改变。数据来自文件类型为".SVRL“的模式验证报告,该文件的结构具有以下使用"RELAX紧凑语法”定义的架构
schematron-output = element schematron-output {
attribute title { text }?,
attribute phase { xsd:NMTOKEN }?,
attribute schemaVersion { text }?,
human-text*,
ns-prefix-in-attribute-values*,
(active-pattern,
(fired-rule, (failed-assert | successful-report)*)+)+
}映射到活动模式,并分别匹配失败断言和成功报告.
现在,有了更多的信息,我应该采取哪种方法?非常感谢你的帮助。:)
编辑端
发布于 2010-06-15 12:41:02
下面是您需要的RegExp:
<(pattern|failed)\b[^>]*(?:/>|>[^<]*</\1>)在Javascript正则表达式表示法中使用时,只需转义斜杠:
var regExp = /<(pattern|failed)\b[^>]*(?:\/>|>[^<]*<\/\1>)/gi;
var matchesArray = testString.match(regExp);这个正则表达式将找到整体和标记,如果它们是空标记或不是(或)。它还考虑了可能的元素属性。
发布于 2010-06-15 04:01:42
您应该查看用于解析XML的正则表达式以外的方法,特别是在以下情况下:
有关Javascript中XML解析的信息,请参见这个答案。
简单的解决方案是“使用jQuery”。如果出于某种原因,您不希望加载jQuery来执行此操作,那么从这里开始。
发布于 2010-06-15 04:54:40
您可以使用regex“AC.26”运算符(意为“或”)创建匹配一个或多个表达式的regex。例如..。
/^<failed>[\w|\W]*?<\/failed>|^<pattern[^>]*>/..。应该按你的要求去做(基于上面给出的例子)。
但是,正如其他评论者所说,用regexs解析XML是一种滑坡。您可能希望查看其他选项,比如使用DocumentFragment类为您解析字符串。
https://stackoverflow.com/questions/3042375
复制相似问题