有时候,我必须处理不完善的xml(没有root)。所以我取第一个节点名称(在本例中为“error”)并构成一个正则表达式模式:"</error>$"
问题是它与以下字符串匹配为true。 (</error>
是该行的结尾)
<error>0</error>
<roles>
<role rid="12" title="User" description="Hello world"></role>
<role rid="11" title="Admin" description="Hello world2"></role></roles>
在查看了一些参考文献后,我尝试</error>\z
和</error>\Z
。但它不起作用。
请帮我解决问题
P.S。如果有更好的解决方案,我会非常高兴。目标环境是javascript。
答案 0 :(得分:4)
如果唯一让你的XML格式不正确的是它缺少root,那么修复很简单 - 只需添加一些根元素然后解析它并将其作为普通XML使用。
xml = '<root>' + xml + '</root>';
You really shouldn't try to parse XML with regular expressions.
答案 1 :(得分:1)
你是对的。不幸的是,javascript不支持\ A和\ Z锚点。考虑使用最后10个字符的子字符串和正则表达式(这可能更有效。)
否则,如果</error>
结束标签后面有任何非空格,请尝试匹配该表达式。
[\s\S]*</error>(?=\s*\S)