-1

抱歉,如果问题重复

我有一个 XML 文件,类似于

<item>
   <attr1>attr1.1</attr1>
   <attr2>attr1.2</attr2>
</item>
...
<item>
   <attr1>attr2.1</attr1>
   <attr2>attr2.2</attr2>
</item>

而我想要做的就是使用正则表达式来获取一个项目数组。出于某种原因,我不想在这里使用 jQuery(我已经阅读了有关 jQuery.parseXML 的信息)。你能告诉我如何在 javascript 中获取所有项目或其他东西,就像 PHP 中的 match_all() 一样。这是我的正则表达式,

 /<item>([\w\W]+?)<\/item>/

谢谢!

4

2 回答 2

0

正如 zerkms 所提到的,已经有一些在 javascript 中解析 XML 的方法可以提供更大范围的健壮性和灵活性。对于尝试使用正则表达式解析正则语言的超集的问题,还有一个特别臭名昭著的答案,简而言之,这不是解决此问题的最佳方法。

但是,如果您正是对这个用例感兴趣,那么不幸的是,没有像 php 中的 match_all 或 python 的 re 中的 findall 之类的功能。看看这个 stackoverflow,尤其是代码块

var str = "I learned to play the Ukulele in Lebanon."
var regex = /le/gi, result, indices = [];
while ( (result = regex.exec(str)) ) {
    indices.push(result.index);
}

在第一个答案中,有关以类似方式查找相同正则表达式的多次出现的一些细节。

于 2012-11-15T03:17:51.453 回答
0

模拟这种行为的一种方法是在正则表达式的替换方法中使用回调函数来构建结果。这是一个方便地抽象为函数的示例...

function match_all(pattern, input){
    var result = [];
    input.replace(pattern, function(_, val){ result.push(val); })
    return result;
}

...使用示例 xml 进行检查...

var sample = "<item>\n\
   <attr1>attr1.1</attr1>\n\
   <attr2>attr1.2</attr2>\n\
</item>\n\
...\n\
<item>\n\
   <attr1>attr2.1</attr1>\n\
   <attr2>attr2.2</attr2>\n\
</item>"

console.log(match_all(/<item>([\w\W]+?)<\/item>/gm, sample))
// [
//    "↵   <attr1>attr1.1</attr1>↵   <attr2>attr1.2</attr2>↵",
//    "↵   <attr1>attr2.1</attr1>↵   <attr2>attr2.2</attr2>↵"
// ]
于 2015-08-01T23:28:44.127 回答