javascript - 正则表达式:Javascript、XML、字符串

标签 javascript regex xml soap

我的变量中有以下数据。

<ctx>
  <PostCode>XXXXXX</PostCode>
  <Title1>Mr</Title1>
  <Name>John</Name>
  <Order1>£100.00</Order1>
  <Order2>£100.01</Order2>
  <Date>10/10/2010</Date
</ctx>

使用以下正则表达式var payload = ctx.toString().match(/Order[1-9]/g);我得到以下结果

Order1,Order1,Order2,Order2

如何让它停止在 Order1、Order2 处,因为正在计算第二个结束标记,而且我也不能使用 <Order[1-9]> (开始标签)因为我的应用程序不允许我捕获标签 <>基本上是一个返回唯一值的正则表达式。

所以下面的正则表达式似乎在某种程度上有效。 (Order[0-9])(?!.*\1) (Order[0-9])(?!.*\1)

https://regex101.com/r/6QhFBg/1

最佳答案

切勿使用正则表达式解析 XML。错误的工具会导致脆弱的解决方案。

相反,请使用真正的 XML 解析器或 XPath。

例如这个XPath,

//*[starts-with(local-name(), 'Order')]

将稳健地选择名称以“Order”开头的所有元素。

在浏览器中的 JavaScript 中,XPath 表达式通过 document.evaluate 求值:

var orders = document.evaluate('//Order[starts-with(local-name(), 'Order')]', document, 
                               null, XPathResult.ANY_TYPE, null );
var thisOrder = orders.iterateNext();

while (thisOrder) {
  console.log(thisOrder.textContent);
  thisOrder = orders.iterateNext();
}

另请参阅How to use document.evaluate() and XPath to get a list of elements?

要解析存储在字符串中的 XML,请参阅示例:

关于javascript - 正则表达式:Javascript、XML、字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59991572/

相关文章:

javascript - 如何制作仅允许特定数字的屏蔽输入?

python - 多个相同的名称组定义或如果系统

c# - 如何模拟 xmlSerializer

JavaScript 在 HTML 中保持图像变化

javascript - d3js 强制定向,鼠标悬停在线链接无法正常工作

java - 获取某些字符串之间的数组或字符串列表(搜索多个字符串)

c# - 正则表达式条件不在最小下划线处返回 false

python - 使用 Python 的 elementtree 为带有文本的节点添加书尾

c# - 为大尺寸和正常尺寸的 xml 功能区按钮添加两个图像

javascript - 使用 Angular Material Calendar 时如何设置 `startAt` 日期?