无法 select 正确的数据

Not able to select the right data

我得到了一份不会改变的遗产xml。 在格式化的方式下,它看起来像这样:

<Result>
    <StepSequence>
      <RealMeasure>
        <Text value="Batman"/>
      </RealMeasure>
    </StepSequence>
    <StepSequence>
      <RealMeasure>
        <Text value="Superman"/>
      </RealMeasure>
    </StepSequence>
</Result>

其实是这样的:

<Result><StepSequence><RealMeasure><Text value="Batman"/></RealMeasure></StepSequence><StepSequence><RealMeasure><Text value="Superman"/></RealMeasure></StepSequence></Result>

我想出的正则表达式是:

<RealMeasure><((\w*)\s+value="(.*)".*?)></RealMeasure>

但它正在 select 发送数据:

<RealMeasure><Text value="Batman"/></RealMeasure></StepSequence><StepSequence><RealMeasure><Text value="Superman"/></RealMeasure>

我想select: <RealMeasure><Text value="Batman"/></RealMeasure>

<RealMeasure><Text value="Superman"/></RealMeasure>

我想要分组,以便稍后可以将匹配转换为类似以下内容: <RealMeasure type="Text" value="Superman"/>

使用如下模式:

<RealMeasure type="" value=>

Link to online regex tester

有什么改进我的正则表达式的技巧吗?

试试这个 -

let reg = /<RealMeasure><((\w+)\s+value="(.*?)".*?)><\/RealMeasure>/g;
let str= `<Result><StepSequence><RealMeasure><Text value="Batman"/></RealMeasure></StepSequence><StepSequence><RealMeasure><Text value="Superman"/></RealMeasure></StepSequence></Result>`;
str.replace(reg, `<RealMeasure type="" value=""/>`); //<Result><StepSequence><RealMeasure type="Text" value="Batman"/></StepSequence><StepSequence><RealMeasure type="Text" value="Superman"/></StepSequence></Result>

value="(.*?)" 也必须是非贪婪的。并将 (\w*) 更改为 (\w+) 以确保类型不为空。

此外,</RealMeasure> 中的 / 必须像 <\/RealMeasure> 一样转义。

我使用了以下正则表达式:

<RealMeasure><(\w+).*?("[^"]*").*?<\/RealMeasure>

它似乎正在做你想要的。

测试here。页面右侧有详细的解释。

请注意,您使用的软件可能会对您可以使用的正则表达式功能施加一些限制。

或者,使用适当的XML解析器提取数据并重新格式化。