我的变量中有以下数据。
<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]>
(开始标签)因为我的应用程序不允许我捕获标签 <>
。 基本上是一个返回唯一值的正则表达式。
最佳答案
切勿使用正则表达式解析 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/