【发布时间】:2018-10-07 19:42:43
【问题描述】:
我有一个字符串如下:
<abc name = "foo">
<child>bar</child>
</abc>
<xyz>1</xyz>
<abc name = "foo2">
<child>bar2</child>
</abc>
<xyz>5</xyz>
我创建了一个正则表达式如下:
var regexapi = /<abc\s*name\s*=\s*"(.*?)"[\s\S]*?<\/abc>\n*<xyz>/gim;
while ( (resApi = regexapi.exec(data))) {
array1.push(resApi[0]);
}
console.log(array1[0]);
现在如果我没有标签<xyz>1</xyz>打印array1[0]应该显示undefined但它打印如下:
<abc name = "foo">
<child>bar</child>
</abc>
<abc name = "foo2">
<child>bar2</child>
</abc>
<xyz>
我认为\n* 存在一些问题,因为我给出了多行标志。不过不确定。
请注意,这是没有 <xyz>1</xyz> 标记的。我希望它打印未定义。
谢谢。
【问题讨论】:
-
你到底想在这里做什么?此外,正则表达式不一定是解析 HTML 的最佳工具。实际上,JavaScript 是一个 HTML 解析器,所以你最好用它来回答这个问题。
-
我将一个 xml 文件作为输入,我想将值存储在
<xyz>中,它可能出现在<abc>标记之后,也可能不出现。如果不存在,我想将该值存储为未定义 -
正如@TimBiegeleisen 所说,使用诸如github.com/Leonidas-from-XIV/node-xml2js 这样的XML 解析器会比正则表达式更容易。
-
您也可以使用 Cheerio (github.com/cheeriojs/cheerio) 并以类似\jQuery 的方式查询您的数据。
-
不要使用正则表达式解析 XML;使用真正的 XML 解析器。 请参阅重复链接(以及此处和网络上的许多其他帖子)以获取解释。
标签: javascript node.js regex xml