首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式重复子表达式

正则表达式重复子表达式
EN

Stack Overflow用户
提问于 2010-06-15 03:36:47
回答 3查看 1.3K关注 0票数 1

我有以下案文

代码语言:javascript
复制
<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>与包含失败标记的所有行匹配。

如果我想要所有失败的标签和失败标签上方的模式标签,我需要做什么。如果在模式标签下没有失败的标记,那么模式标记不应该匹配吗?基本上,我希望得到以下输出:

代码语言:javascript
复制
<pattern name="pattern1"/>
<failed> failure 1</failed>
<failed> failure 2</failed>
<pattern name="pattern2"/>
<failed> failure 3</failed>

我在javascript中这样做,我不介意做一些中间步骤。

编辑启动,几乎所有的回复程序都建议我采用不同的方法。我不知道该采取哪种方法。JQuery,regex等。我在这里提供更多的信息,以便做出更好的决策。数据格式会改变,但不会经常改变。数据来自文件类型为".SVRL“的模式验证报告,该文件的结构具有以下使用"RELAX紧凑语法”定义的架构

代码语言:javascript
复制
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)*)+)+
}

映射到活动模式,并分别匹配失败断言和成功报告.

现在,有了更多的信息,我应该采取哪种方法?非常感谢你的帮助。:)

编辑端

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-15 12:41:02

下面是您需要的RegExp:

代码语言:javascript
复制
<(pattern|failed)\b[^>]*(?:/>|>[^<]*</\1>)

在Javascript正则表达式表示法中使用时,只需转义斜杠:

代码语言:javascript
复制
var regExp = /<(pattern|failed)\b[^>]*(?:\/>|>[^<]*<\/\1>)/gi;
var matchesArray = testString.match(regExp);

这个正则表达式将找到整体和标记,如果它们是空标记或不是(或)。它还考虑了可能的元素属性。

票数 1
EN

Stack Overflow用户

发布于 2010-06-15 04:01:42

您应该查看用于解析XML的正则表达式以外的方法,特别是在以下情况下:

  • 您的需求可能会在未来发生变化,使您的正则表达式变得越来越不正常。
  • 您正在解析来自第三方源的数据,其中可能包含几乎任何内容,包括看起来类似于XML注释、CDATA部分或属性中的XML标记的字符串。

有关Javascript中XML解析的信息,请参见这个答案

简单的解决方案是“使用jQuery”。如果出于某种原因,您不希望加载jQuery来执行此操作,那么从这里开始

票数 1
EN

Stack Overflow用户

发布于 2010-06-15 04:54:40

您可以使用regex“AC.26”运算符(意为“或”)创建匹配一个或多个表达式的regex。例如..。

代码语言:javascript
复制
/^<failed>[\w|\W]*?<\/failed>|^<pattern[^>]*>/

..。应该按你的要求去做(基于上面给出的例子)。

但是,正如其他评论者所说,用regexs解析XML是一种滑坡。您可能希望查看其他选项,比如使用DocumentFragment类为您解析字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3042375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档